我有一个使用默认Sql MembershipProvider的C#asp.net应用程序。我的web.config有一些控制我如何使用此提供程序的设置:
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresUniqueEmail="true"
passwordFormat="Hashed"
minRequiredPasswordLength="5"
我遇到的问题是,当人们重置密码时,似乎ResetPassword()方法返回的密码比我想要的长,并且包含可能令人困惑的字符(l,1,i,I, 0,O)。此外,我正在向用户发送一封包含纯文本消息和HTML消息的电子邮件(我正在使用带有AlternateViews的MailMessage)。如果密码中包含不安全的HTML字符,则当电子邮件客户端呈现HTML文本时,密码可能会有所不同(例如,%,&和<不完全是HTML安全的)。
我查看了web.config中的“add”元素,但是我没有看到任何额外的配置属性,只包含ResetPassword()方法中的某些字符并限制密码长度。 / p>
我可以配置ResetPassword()方法来限制密码长度并限制它选择的字符集吗?
现在我有一个解决方法:我调用ResetPassword()以确保提供的答案是正确的,然后我使用从互联网上下载的RandomPassword generator来生成我喜欢的密码(没有模棱两可的字符,HTML安全,只有8个字符长)然后我调用ChangePassword()来更改用户密码后我已经重置它。
我的解决方法似乎很糟糕,我认为配置ResetPassword()以做我想要的更好。
谢谢〜!
ColoradoTechie
答案 0 :(得分:2)
我不相信你可以做任何事情来“配置”ResetPassword()调用。您可以编写自己的提供程序来更改ResetPassword()的工作方式。
这link描述了你似乎已经做过的同样的策略......
坚持你的工作/黑客可能是最简单的方法。 : - )
但是,如果您想了解有关如何创建自己的提供商的更多信息,请查看这些链接。
http://www.asp.net/learn/videos/video-189.aspx
http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx
答案 1 :(得分:2)
使用GeneratePassword
方法可确保至少所创建的密码符合MinRequiredPasswordLength
和MinRequiredNonAlphanumericCharacters
的设置。我正在做这样的事情:
// aUser is of class MembershipUser
string aTempPassword = aUser.ResetPassword();
string aNewPassword = Membership.GeneratePassword(
Membership.MinRequiredPasswordLength,
Membership.MinRequiredNonAlphanumericCharacters);
aUser.ChangePassword(aTempPassword, aNewPassword);
嗯,这只是你想要的50%,因为你无法控制用于最终密码的字符集。
(实际上,从我的观点来看,这也是更重要的方面 - 特别是如果你有需要10分钟和3个支持电话的用户成功点击卷曲支架的组合键并且不知道剪贴板是什么。 ResetPassword
可能会让你成为最讨厌的人之一。)
答案 2 :(得分:1)
我知道这已经得到了解答,但是我想在今天遇到这个问题后再增加2美分。
public virtual string GeneratePassword()
由ResetPassword调用。因此,您只需扩展SQLMembershipProvider类并实现自己的GeneratePassword版本。
请注意,这样做会要求您更新web.config中的成员资格提供程序条目以使用新的成员资格提供程序类:
<membership>
<providers>
<add type="My.Namespace.MyCustomSqlMembershipProvider" ... />