tag:blogger.com,1999:blog-18669442.post408688029265829691..comments2024-03-26T17:54:23.738+00:00Comments on Shared .NET stuff: How to configure a membership provider programmaticallyJacques L. Chereauhttp://www.blogger.com/profile/03733988177982708738noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-18669442.post-5263487349303194682015-11-11T20:54:31.306+00:002015-11-11T20:54:31.306+00:00Still works like a champ, thanks!Still works like a champ, thanks!Chris Carterhttps://www.blogger.com/profile/13484161082627269605noreply@blogger.comtag:blogger.com,1999:blog-18669442.post-60422088403661632062012-12-18T07:27:52.463+00:002012-12-18T07:27:52.463+00:00How can we configure Role manager provider same wa...How can we configure Role manager provider same way?? is it possibleAnonymoushttps://www.blogger.com/profile/13960825193389538265noreply@blogger.comtag:blogger.com,1999:blog-18669442.post-159092372028019372011-08-12T21:31:21.074+01:002011-08-12T21:31:21.074+01:00This is cool. I can actually run this as a standa...This is cool. I can actually run this as a standalone app outside of any web application. I just change "connectionStringName" to "connectionString" and specify an actual connection string, so it doesn't go looking for any settings in web.config. I had to change target platform to .NET Framework 4 (not Client Profile!), so I could include the System.Web.dll and System.Web.ApplicationServices.dll. I then specify the correct application name, which for the root of the web site is "/", and then I can grab any user and reset their password! Thanks! Once you reset a users password, you can then log in as them, and access password reset screens, etc.Triynkohttps://www.blogger.com/profile/09654558587778835500noreply@blogger.comtag:blogger.com,1999:blog-18669442.post-83898422491306915742010-03-18T09:19:08.887+00:002010-03-18T09:19:08.887+00:00This code was giving me the above mentioned error,...This code was giving me the above mentioned error, when calling .GetUser in any webpage. But when I changed the default constructor to the following, it worked like a charm!<br /><br /> public MyMembership()<br /> {<br /> NameValueCollection mem = Utils.GetMembershipParams();<br /> _sprov = new SqlMembershipProvider();<br /> _sprov.Initialize("DPaySqlMembershipProvider", mem);<br /><br /><br /> MembershipProviderCollection colMembershipProviders = new MembershipProviderCollection();<br /> colMembershipProviders.Add(_sprov);<br /> colMembershipProviders.SetReadOnly();<br /><br /> BindingFlags enuBindingFlags = BindingFlags.NonPublic | BindingFlags.Static;<br /> Type objMembershipType = typeof(Membership);<br /> objMembershipType.GetField("s_Initialized", enuBindingFlags).SetValue(null, true);<br /> objMembershipType.GetField("s_InitializeException", enuBindingFlags).SetValue(null, null);<br /> objMembershipType.GetField("s_HashAlgorithmType", enuBindingFlags).SetValue(null, "SHA1");<br /> objMembershipType.GetField("s_HashAlgorithmFromConfig", enuBindingFlags).SetValue(null, false);<br /> objMembershipType.GetField("s_UserIsOnlineTimeWindow", enuBindingFlags).SetValue(null, 15);<br /> objMembershipType.GetField("s_Provider", enuBindingFlags).SetValue(null, _sprov);<br /> objMembershipType.GetField("s_Providers", enuBindingFlags).SetValue(null, colMembershipProviders);<br /> }<br /><br /><br />A note to whoever might want to use this code: the line NameValueCollection mem = Utils.GetMembershipParams();<br />basically does what the following lines of the original post do:<br /><br />NameValueCollection objConfig = new NameValueCollection();<br />objConfig.Add("connectionStringName", "MyDatabase");<br />objConfig.Add("enablePasswordRetrieval", "false");<br />objConfig.Add("enablePasswordReset", "true");<br />objConfig.Add("requiresQuestionAndAnswer", "true");<br />objConfig.Add("applicationName", "MyApp");<br />objConfig.Add("requiresUniqueEmail", "true");<br />objConfig.Add("maxInvalidPasswordAttempts", "5");<br />objConfig.Add("passwordAttemptWindow", "10");<br />objConfig.Add("commandTimeout", "30");<br />objConfig.Add("passwordFormat", "Hashed");<br />objConfig.Add("name", "AspNetSqlMembershipProvider");<br />objConfig.Add("minRequiredPasswordLength", "8");<br />objConfig.Add("minRequiredNonalphanumericCharacters", "2");<br />objConfig.Add("passwordStrengthRegularExpression", "(?=^.{8,25}$)(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+}{\\":;'?/>.<,])(?!.*\\s).*$"));<br /><br /><br />So, again thanks for the helpful post Jacques!vas_chanhttps://www.blogger.com/profile/15342808077411216155noreply@blogger.comtag:blogger.com,1999:blog-18669442.post-49359296950327392152010-03-18T09:17:43.571+00:002010-03-18T09:17:43.571+00:00On the Remote Host Application (running on the APP...On the Remote Host Application (running on the APP server)<br />my code for the remote object:<br /><br />public class MyMembership : MarshalByRefObject, IDisposable<br /> {<br /><br /> private SqlMembershipProvider _sprov;<br /><br /> <br /> public MembershipUser GetUser(object providerUserKey)<br /> {<br /> return _sprov.GetUser(providerUserKey, true);<br /> }<br /><br /> public MembershipUser GetUser(object providerUserKey, bool userIsOnline)<br /> {<br /> return _sprov.GetUser(providerUserKey, userIsOnline);<br /> }<br /><br /> public MembershipUser GetUser(string username)<br /> {<br /> return _sprov.GetUser(username, true);<br /> }<br /><br /> public MembershipUser GetUser(string username, bool userIsOnline)<br /> {<br /> return _sprov.GetUser(username, userIsOnline);<br /> }<br /><br /> public bool ValidateUser(string username, string password)<br /> {<br /> return _sprov.ValidateUser(username, password);<br /> }<br /><br /> public MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)<br /> {<br /> return _sprov.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved,<br /> providerUserKey, out status);<br /> }<br /><br /> public MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, out MembershipCreateStatus status)<br /> {<br /> return _sprov.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved,<br /> null, out status);<br /> }<br /><br /> public bool DeleteUser(string username, bool deleteAllRelatedData)<br /> {<br /> return _sprov.DeleteUser(username, deleteAllRelatedData);<br /> }<br /><br /> //the following constructor is called when SAO activation model is used and the config params are gathered on the host side of remoting (i.e. the app server)<br /> public MyMembership()<br /> {<br /> NameValueCollection mem = Utils.GetMembershipParams();<br /> _sprov = new SqlMembershipProvider();<br /> _sprov.Initialize("MySqlMembershipProvider", mem);<br /> <br /> }<br /><br /> //the following constructor is called when CAO activation model is used adn the config params are passed from the client side of remoting (i.e. the web server) <br /> public MyMembership(NameValueCollection config) <br /> {<br /> _sprov = new SqlMembershipProvider();<br /> _sprov.Initialize("MySqlMembershipProvider", config);<br /> }<br /><br /> public void Dispose()<br /> {<br /> _sprov = null;<br /> }<br /> }vas_chanhttps://www.blogger.com/profile/15342808077411216155noreply@blogger.comtag:blogger.com,1999:blog-18669442.post-18517152774330525222010-03-18T09:16:57.420+00:002010-03-18T09:16:57.420+00:00This has been a very helpful post! I would like sh...This has been a very helpful post! I would like share my scenario, for people who might be searching the web for something similar. <br /><br />I have a web application where the WEB server does not have access to the DB server, thus all DB interaction is done through an APP server, via remoting. <br /><br />My specific need, which was helped by this post, was to be able to create a remote object which encapsulates an instance of type SqlMembershipProvider. The Membership object in the web server is created in Global.asax Application_Start and stored in the Application collection of objects, so as to be shared accross the application (as is the case when you use the default MembershipProvider object of Microsoft).<br />There are two choices as to how the remote object is configured: Client-Activated Object (CAO) or Singleton Server-Activated Object (SAO).<br />When CAO is used, everything worked fine, except for the (unacceptable) limitation that in case the Remote Host Application was restarted the CAO is rendered useless, which means I have no membership in my web app, and thus the web app needs to be restarted.<br />So, Singleton SAO (with an infinite leaseTime) is the way to go, if restartability (and scalability) is needed. But when I configured it as Singleton SAO I had an error come up, when I tried to call .GetUser in any webpage. The error is : <b>The attribute 'connectionStringName' is missing or empty</b>.vas_chanhttps://www.blogger.com/profile/15342808077411216155noreply@blogger.comtag:blogger.com,1999:blog-18669442.post-34339195615054587042009-01-03T03:17:00.000+00:002009-01-03T03:17:00.000+00:00Thanks so much for posting this article. Worked li...Thanks so much for posting this article. Worked like a charm.<BR/><BR/>I just had a couple compile errors to fix: relating to objConfig.Add()); having 2 ending ).<BR/><BR/>The regex should have \\d and \\sUnknownhttps://www.blogger.com/profile/00871086810812217723noreply@blogger.comtag:blogger.com,1999:blog-18669442.post-35127302188850331802008-12-30T22:17:00.000+00:002008-12-30T22:17:00.000+00:00One final note:objConfig.Add("connectionStringName...One final note:<BR/><BR/>objConfig.Add("connectionStringName", "DB");<BR/><BR/>for some reason connectionStringName is set to "DB" instead of what you set it to earlier. Not sure why, but this is what i see on my debugger.<BR/><BR/>Thank you for this code. It really helped!beernutzhttps://www.blogger.com/profile/14789987899545926239noreply@blogger.comtag:blogger.com,1999:blog-18669442.post-50526046789869258762008-12-30T21:22:00.000+00:002008-12-30T21:22:00.000+00:00Just a note while i am trying to get this this cod...Just a note while i am trying to get this this code working:<BR/><BR/>objConfig.Add("passwordFormat", "Hash"));<BR/><BR/>should be<BR/><BR/>objConfig.Add("passwordFormat", "Hashed"));<BR/><BR/>and <BR/><BR/>BindingFlags enuBindingFlags = BindingFlags.NonPublic BindingFlags.Static;<BR/><BR/>should be <BR/><BR/>BindingFlags enuBindingFlags = BindingFlags.NonPublic | BindingFlags.Static;beernutzhttps://www.blogger.com/profile/14789987899545926239noreply@blogger.comtag:blogger.com,1999:blog-18669442.post-69999180412853036722008-12-30T21:20:00.000+00:002008-12-30T21:20:00.000+00:00This comment has been removed by the author.beernutzhttps://www.blogger.com/profile/14789987899545926239noreply@blogger.com