如何不使用 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?