コード例 #1
0
        SqlMembershipProvider InitializeAndGetAspMembershipConfig(String connectionString, String appName)
        {
            // https://stackoverflow.com/questions/3021877/how-to-read-system-web-section-from-web-config
            // https://stackoverflow.com/questions/1026079/how-can-i-configure-asp-net-membership-providers-through-code
            // https://stackoverflow.com/questions/357465/can-i-add-connectionstrings-to-the-connectionstringcollection-at-runtime

            typeof(ConfigurationElementCollection)
            .GetField("bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic)
            .SetValue(ConfigurationManager.ConnectionStrings, false);

            ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings("DefaultConnection", connectionString, "System.Data.SqlClient"));

            var membershipProv = new SqlMembershipProvider();

            membershipProv.Initialize("AspNetSqlMembershipProvider", new NameValueCollection {
                ["connectionStringName"]                 = "DefaultConnection",
                ["applicationName"]                      = appName,
                ["enablePasswordRetrieval"]              = "false",
                ["enablePasswordReset"]                  = "true",
                ["requiresQuestionAndAnswer"]            = "false",
                ["requiresUniqueEmail"]                  = "true",
                ["minRequiredNonalphanumericCharacters"] = "0",
                ["minRequiredPasswordLength"]            = "12",
                ["maxInvalidPasswordAttempts"]           = "10",
                ["passwordStrengthRegularExpression"]    = "(?:[A-Z][a-z0-9\\W_])|(?:[a-z][A-Z0-9\\W_])|(?:[0-9][A-Za-z\\W_])|(?:[\\W_][A-Za-z0-9])",
                ["passwordFormat"] = "Hashed"
            });

            return(membershipProv);
        }
コード例 #2
0
        public static SqlMembershipProvider InitializeAndGetAspMembershipConfig(String connectionstring, String appname, String hashAlgo)
        {
            typeof(ConfigurationElementCollection)
            .GetField("bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic)
            .SetValue(ConfigurationManager.ConnectionStrings, false);

            ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings("DefaultConnection", connectionstring, "System.Data.SqlClient"));

            var membershipProv = new SqlMembershipProvider();

            membershipProv.Initialize("AspNetSqlMembershipProvider", new NameValueCollection {
                ["connectionStringName"]                 = "DefaultConnection",
                ["applicationName"]                      = appname,
                ["enablePasswordRetrieval"]              = "false",
                ["enablePasswordReset"]                  = "true",
                ["requiresQuestionAndAnswer"]            = "false",
                ["requiresUniqueEmail"]                  = "true",
                ["minRequiredNonalphanumericCharacters"] = "0",
                ["minRequiredPasswordLength"]            = "1",
                ["maxInvalidPasswordAttempts"]           = "10",
                ["passwordStrengthRegularExpression"]    = ".+",
                ["passwordFormat"] = "Hashed"
            });

            typeof(SqlMembershipProvider)
            .GetField("s_HashAlgorithm", BindingFlags.Instance | BindingFlags.NonPublic)
            .SetValue(membershipProv, hashAlgo);

            return(membershipProv);
        }
コード例 #3
0
        public void ProfileSystem_UnitTest_CreateUserWithAccount()
        {
            Account act;
            SqlMembershipProvider provider;
            NameValueCollection   collection;
            string         userName;
            MembershipUser user;

            //first initialize the membership objects
            provider   = new SqlMembershipProvider();
            collection = new NameValueCollection();
            collection.Add("applicationName", "eCommerceFramework");
            collection.Add("name", "CMSMembershipProvider");
            collection.Add("requiresQuestionAndAnswer", "false");
            collection.Add("connectionStringName", "MembershipSqlConnection");
            provider.Initialize(collection["name"], collection);
            userName = "******";

            try
            {
                // Retrieve user
                user = provider.GetUser(userName, false);

                if (user == null)
                {
                    // Following exception raised at Membership.CreateUser (can't step in either for whatever reason)
                    // System.NotSupportedException: Specified method is not supported.
                    user = Membership.CreateUser(userName, userName, userName + "@mediachase.com");
                    act  = ProfileContext.Current.CreateAccountForUser(user);
                }
                else
                {
                    act = ProfileContext.Current.GetAccount(user.ProviderUserKey.ToString());
                }

                // Assert that account is retrieved.
                Assert.IsNotNull(act, "Failed: Account associated with user could not be retrieved.\n");
                Console.WriteLine("Created account with ID: {0}.\n", act.AccountId);

                // Delete created account
                Console.WriteLine("Deleting user {0}.", act.AccountId);
                act.Delete();
                act.AcceptChanges();
                Assert.IsTrue(act.ObjectState == MetaObjectState.Deleted, "Failed: Account was not deleted.\n");

                // Delete new user, assert that it happened.
                Assert.IsTrue(provider.DeleteUser(userName, true), "Failed: User was not deleted.\n");
            }
            catch (Exception exc)
            {
                // Clean-up
                provider.DeleteUser(userName, true);

                throw exc;
            }
        }
コード例 #4
0
        public MembershipService()
        {
            //HACK: Hardcoded values!!!
            NameValueCollection config = new NameValueCollection();

            config.Add("name", "SqlMembershipProvider");
            config.Add("connectionStringName", "arachnode_net_ConnectionString");
            config.Add("applicationName", "arachnode.net");

            SqlMembershipProvider.Initialize("SqlMembershipProvider", config);
        }
コード例 #5
0
        public Provider()
        {
            try
            {
                SqlMembershipProvider sqlMembershipProvider = new SqlMembershipProvider();
                NameValueCollection   config = new NameValueCollection();
                config.Add("connectionStringName", "myConnection");
                config.Add("enablePasswordRetrieval", "false");
                config.Add("enablePasswordReset", "true");
                config.Add("requiresQuestionAndAnswer", "false");
                config.Add("applicationName", "MyApp");
                config.Add("requiresUniqueEmail", "true");
                config.Add("maxInvalidPasswordAttempts", "3");
                config.Add("passwordAttemptWindow", "5");
                config.Add("commandTimeout", "30");
                config.Add("name", "AspNetSqlMembershipProvider");
                config.Add("minRequiredPasswordLength", "9");
                config.Add("minRequiredNonalphanumericCharacters", "1");
                sqlMembershipProvider.Initialize(config["name"], config);

                MembershipProviderCollection membershipProviders = new MembershipProviderCollection();
                membershipProviders.Add(sqlMembershipProvider);
                membershipProviders.SetReadOnly();

                BindingFlags bindingFlags   = BindingFlags.NonPublic | BindingFlags.Static;
                Type         membershipType = typeof(Membership);
                membershipType.GetField("s_Initialized", bindingFlags).SetValue(null, true);
                membershipType.GetField("s_InitializeException", bindingFlags).SetValue(null, null);
                membershipType.GetField("s_HashAlgorithmType", bindingFlags).SetValue(null, "SHA-512");
                membershipType.GetField("s_HashAlgorithmFromConfig", bindingFlags).SetValue(null, false);
                membershipType.GetField("s_UserIsOnlineTimeWindow", bindingFlags).SetValue(null, 15);
                membershipType.GetField("s_Provider", bindingFlags).SetValue(null, sqlMembershipProvider);
                membershipType.GetField("s_Providers", bindingFlags).SetValue(null, membershipProviders);

                var connectionString = Membership.Provider.GetType().GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic);
                if (connectionString != null)
                {
                    connectionString.SetValue(Membership.Provider, DBCommands._Connection);
                }

                NewPasswordNeeded();
            }
            catch (Exception ex)
            {
                DBCommands.RecordError(ex);
            }
        }
コード例 #6
0
        private static MembershipProvider CreateMembershipProvider()
        {
            var config = ConfigurationManager.OpenExeConfiguration(assemblyFilePath);

            var systemWebGroup = config.SectionGroups["system.web"];

            if (systemWebGroup == null)
            {
                throw new ConfigurationErrorsException("system.web group not found in configuration");
            }

            var membershipSection = systemWebGroup.Sections["membership"];

            if (membershipSection == null)
            {
                throw new ConfigurationErrorsException("membership section not found in system.web group");
            }

            var defaultProviderProperty = membershipSection.ElementInformation.Properties["defaultProvider"];

            if (defaultProviderProperty == null)
            {
                throw new ConfigurationErrorsException("defaultProvider property not found in membership section");
            }

            var defaultProviderName = defaultProviderProperty.Value as string;

            if (defaultProviderName == null)
            {
                throw new ConfigurationErrorsException("defaultProvider property is not a string value");
            }

            var providersProperty = membershipSection.ElementInformation.Properties["providers"];

            if (providersProperty == null)
            {
                throw new ConfigurationErrorsException("providers property not found in membership section");
            }

            var providerCollection = providersProperty.Value as ProviderSettingsCollection;

            if (providerCollection == null)
            {
                throw new ConfigurationErrorsException("providers property is not an instance of ProviderSettingsCollection");
            }

            ProviderSettings membershipProviderSettings = null;

            foreach (ProviderSettings providerSetting in providerCollection)
            {
                if (providerSetting.Name == defaultProviderName)
                {
                    membershipProviderSettings = providerSetting;
                }
            }

            if (membershipProviderSettings == null)
            {
                if (providerCollection.Count > 0)
                {
                    membershipProviderSettings = providerCollection[0];
                }
                else
                {
                    throw new ConfigurationErrorsException("No providers found in configuration");
                }
            }

            var provider = new SqlMembershipProvider();

            provider.Initialize("MySqlMembershipProvider", membershipProviderSettings.Parameters);
            return(provider);
        }