我正在使用ASP.NET MVC演示附带的标准SqlMembershipProvider.
我有兴趣在我的网站上实现"忘记密码"链接.
实现此功能的正确方法是什么?我应该用临时密码覆盖密码并通过电子邮件发送到他们的注册邮箱吗?
Ras*_*ain 10
根据应用程序的性质,忘记密码的最佳实践应遵循以下顺序
提供商将自动为您重置:
http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.resetpassword.aspx
该示例仅将新密码返回给浏览器,而不是通过电子邮件发送给用户,但使用可以使用提供程序配置的机密问题/答案.
此示例获取密码并通过电子邮件发送给它:
http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.getpassword.aspx
我认为这两种方法都是安全的.它的步骤更安全,因为用户必须知道问题/答案和电子邮件密码来破解帐户.
我意识到这些样本没有使用MVC,但我相信它足以让你前进.:)
当然最好通过电子邮件向用户发送一个链接,其中包含某种无法猜测的URL(例如包含随机Guid.当用户点击URL时,他们可以重置密码.该URL应该只适用于一次,并且应该在一段时间后过期.
它取决于您使用的会员提供商类型.但我会建议使用简单的成员资格提供程序进行身份验证以获取更多详细信息, 请访问以
这是给你的一些代码
[HttpPost]
[AllowAnonymous]
public ActionResult ForgotPassword(ForgotPasswordModel model)
{
.
.
.
.
if (WebSecurity.UserExists(model.UserName))
{
var token = WebSecurity.GeneratePasswordResetToken(model.UserName, 60);
.
.
.
.
// send this token by email
}
else
{
ModelState.AddModelError("", "Could not find User");
}
}
return View(model);
}
[HttpPost]
public ActionResult ResetPassword( ResetPasswordModel model)
{
string token = Request.Params["token"];
if (!string.IsNullOrEmpty(token))
{
if (WebSecurity.ResetPassword(token, model.NewPassword))
{
// send email…….. or
return View();
}
}
Run Code Online (Sandbox Code Playgroud)