如何不使用 ASP.Net Membership Security Question and Answer 进行自定义密码恢复?

Posted

技术标签:

【中文标题】如何不使用 ASP.Net Membership Security Question and Answer 进行自定义密码恢复?【英文标题】:How to not use ASP.Net Membership Security Question and Answer for custom password recovery? 【发布时间】:2010-10-29 13:15:11 【问题描述】:

我不想拥有 ASP.Net Membership Provider 提供的安全问答功能,但我确实想启用丢失/忘记密码页面。

此页面将是用户输入他/她的电子邮件地址的地方,如果用户注册了通过发送到该注册电子邮件地址的链接重置密码,则会向该地址发送一封电子邮件

我创建了自定义表来跟踪此类请求、分配给请求的随机键以及请求的到期日期。然而,在编写代码以实际重置密码时,我意识到似乎没有一种方法可以在不需要使用安全问答位(我没有)的情况下执行 ResetPassword(email, newPassword) 之类的操作。

有没有办法通过内置的会员功能简单地重置用户的密码?

如果没有,我需要如何完成这项工作?

提前感谢您提供的任何帮助。 -日产

【问题讨论】:

【参考方案1】:

我最终做的是以下

public string ResetPassword(string email)
        
            var m_userName = Membership.GetUserNameByEmail(email);
            var m_user = Membership.GetUser(m_userName);
            return m_user.ResetPassword();
        

然后我添加了一个新方法来使用这个值来更改密码

public bool ChangeLostPassword(string email, string newPassword)
    
        var resetPassword = ResetPassword(email);
        var currentUser = Membership.GetUser(Membership.GetUserNameByEmail(email), true);
        return currentUser.ChangePassword(resetPassword, newPassword);

    

【讨论】:

【参考方案2】:

为什么不在 web.config 中更改此选项?

         enablePasswordRetrieval="false"
         enablePasswordReset="true"
         requiresQuestionAndAnswer="false"

<membership>
   <providers>
      <clear/>
      <add name="AspNetSqlMembershipProvider" ...
      ..........

【讨论】:

这一步是我发布的解决方案的一部分,但不是解决方案本身。更改 web.config 仍然会让我无法通过将密码和用户名单独传递给 Membership 方法来更改密码。我发布的解决方案给出了这个解决方案。不过感谢您的贡献。

以上是关于如何不使用 ASP.Net Membership Security Question and Answer 进行自定义密码恢复?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC2 Membership:如何获取登录用户的 userID 和 roleID?

Membership 介绍

ASP.net Membership角色与权限管理

ASP.net Membership角色与权限管理

新站点创建和安全/身份验证,- 我应该使用 ASP.net Membership Provider 吗?

ASP.NET Membership 是不是具有生成密码重置 URL 的机制?