【问题标题】:How should I implement "Forgot your password" in ASP.NET MVC?我应该如何在 ASP.NET MVC 中实现“忘记密码”?
【发布时间】:2010-11-21 22:57:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# asp.net-mvc membership


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      提供商会自动为您进行重置:

      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,但我相信这足以让您继续前进。 :)

      【讨论】:

        【解决方案3】:

        当然,最好通过电子邮件向用户发送带有某种无法猜测的 URL 的链接(比如包含随机 Guid。当用户单击 URL 时,他们能够重置密码。该 URL 应该适合一种用途仅限,并且应该在设定的时间后过期。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2018-07-07
            • 1970-01-01
            • 2016-09-13
            • 2011-07-28
            • 1970-01-01
            • 2011-07-26
            • 1970-01-01
            • 2017-07-06
            • 1970-01-01
            相关资源
            最近更新 更多