【问题标题】:Can I configure the ResetPassword in Asp.Net's MembershipProvider?我可以在 Asp.Net 的 MembershipProvider 中配置 ResetPassword 吗?
【发布时间】:2010-04-02 16:39:31
【问题描述】:

我有一个使用默认 Sql MembershipProvider 的 C# asp.net 应用程序。我的 web.config 有一些设置可以控制我如何使用这个 Provider:

enablePasswordRetrieval="false" 
enablePasswordReset="true"
requiresUniqueEmail="true"
passwordFormat="Hashed" 
minRequiredPasswordLength="5" 

我遇到的问题是,当人们重置密码时,ResetPassword() 方法返回的密码似乎比我想要的长,并且包含可能令人困惑的字符(l、1、i、I、 0,O)。此外,我正在向我的用户发送一封带有纯文本消息和 HTML 消息的电子邮件(我正在使用带有 AlternateViews 的 MailMessage)。如果密码中包含不安全的 HTML 字符,则当电子邮件客户端呈现 HTML 文本时,密码可能会有所不同(例如,%、& 和

我查看了属于 web.config 的“add”元素,但我没有看到任何额外的配置属性,仅在 ResetPassword() 方法中包含某些字符并限制密码长度。

我可以配置 ResetPassword() 方法来限制密码长度并限制它选择的字符集吗?

现在我有一个解决方法:我调用 ResetPassword() 以确保提供的答案是正确的,然后我使用我从互联网上下载的RandomPassword generator 生成我喜欢的密码(没有模棱两可的字符,HTML安全,并且只有 8 个字符长),然后我在重置后调用 ChangePassword() 来更改用户的密码。

我的解决方法似乎很笨拙,我认为最好配置 ResetPassword() 来做我想做的事。

谢谢~!

科罗拉多技术

【问题讨论】:

  • 到目前为止,您对RandomPassword generator 有很好的体验吗?我也在寻找这样的东西,因为我从来没有找到配置ResetPassword的方法。
  • 我个人喜欢它,但是我们还没有完成我们的应用程序的构建,所以我不确定它在生产中的情况。现在我调用它两次(newPassword = RandomPassword.Generate(7) + RandomPassword.Generate(1); )因为我希望我的新密码以一个字符开头和结尾(如果您阅读 cmets,代码将始终生成以字符开头的密码)。我也喜欢如何限制特殊字符。
  • 需要注意的一点:我不知道 MembershipProvider 是否会限制您频繁更改密码,因此如果您重置他人的密码然后更改密码,您可能需要增加数字人们能够更改密码的次数。

标签: asp.net passwords reset sqlmembershipprovider


【解决方案1】:

我不相信您可以做任何事情来“配置” ResetPassword() 调用。您可以编写自己的提供程序来更改 ResetPassword() 的工作方式。

这个link 描述了你似乎已经在做的同样的策略......

继续你的工作/破解可能是最简单的方法。 :-)

但是,如果您想了解有关如何创建自己的提供商的更多信息,请查看这些链接。

http://www.asp.net/learn/videos/video-189.aspx

http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx

http://www.devx.com/asp/Article/29256/0/page/3

http://www.15seconds.com/issue/050216.htm

【讨论】:

    【解决方案2】:

    使用GeneratePassword 方法至少可以确保创建的密码满足您对MinRequiredPasswordLengthMinRequiredNonAlphanumericCharacters 的设置。我正在做这样的事情:

    // 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 可以让你成为最讨厌的人之一。)

    【讨论】:

      【解决方案3】:

      我知道这个问题已经得到解答,但自从我今天遇到这个问题以来,我想加我的 2 美分。

      SQLMembershipProvider 类公开

      public virtual string GeneratePassword()
      

      ResetPassword 调用。因此,您可以简单地扩展 SQLMembershipProvider 类并实现您自己的GeneratePassword 版本。

      请注意,这样做将要求您更新 web.config 中的成员资格提供程序条目以使用新的成员资格提供程序类:

      <membership>
        <providers>
          <add type="My.Namespace.MyCustomSqlMembershipProvider" ... />        
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-21
        • 1970-01-01
        • 1970-01-01
        • 2011-05-20
        • 1970-01-01
        • 2019-01-21
        相关资源
        最近更新 更多