我应该如何在ASP.NET MVC中实现“忘记密码”?

时间:2009-08-22 19:34:28

标签: c# asp.net-mvc membership

我正在使用ASP.NET MVC演示附带的标准SqlMembershipProvider。

我有兴趣在我的网站上实施“忘记密码”链接。

实现此功能的正确方法是什么?我应该用临时密码覆盖密码并通过电子邮件发送到他们注册的电子邮件吗?

4 个答案:

答案 0 :(得分:10)

根据应用程序的性质,忘记密码的最佳做法应遵循以下顺序

  1. 允许用户验证机密/问题最多3到5次尝试
  2. 验证成功后,发送包含随机生成密码的电子邮件,有效期为24小时。
  3. 电子邮件必须包含仅密码,但不能同时包含用户名/密码。
  4. 当用户使用临时密码登录时,必须强制用户在转到主页之前创建新密码

答案 1 :(得分:8)

提供商会自动为您重置:

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,但我确信它足以让你前进。 :)

答案 2 :(得分:6)

当然最好通过电子邮件向用户发送带有某种无法猜测的URL的链接(比如包含随机Guid。当用户点击URL时,他们可以重置密码。该URL应该适合一次使用只有,并且应该在一段时间后过期。

答案 3 :(得分:5)

它取决于您使用的会员提供商类型。 但我会建议使用简单的成员资格提供程序进行身份验证以获取更 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();
            }
        }