【发布时间】:2010-11-21 22:57:00
【问题描述】:
我正在使用 ASP.NET MVC 演示附带的标准 SqlMembershipProvider。
我有兴趣在我的网站上实现“忘记密码”链接。
实现此功能的正确方法是什么?我应该用一个临时密码覆盖密码并将其通过电子邮件发送到他们注册的电子邮件吗?
【问题讨论】:
标签: c# asp.net-mvc membership
我正在使用 ASP.NET MVC 演示附带的标准 SqlMembershipProvider。
我有兴趣在我的网站上实现“忘记密码”链接。
实现此功能的正确方法是什么?我应该用一个临时密码覆盖密码并将其通过电子邮件发送到他们注册的电子邮件吗?
【问题讨论】:
标签: c# asp.net-mvc membership
根据应用程序的性质,忘记密码的最佳做法应按以下顺序进行
【讨论】:
提供商会自动为您进行重置:
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 应该适合一种用途仅限,并且应该在设定的时间后过期。
【讨论】:
这取决于您使用的会员资格提供商类型。 但我会建议使用简单的会员资格提供者进行身份验证以获取更多详细信息 please visit the following link
这里有一些代码给你
[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();
}
}
【讨论】: