0

我有一个 MVC3 Razor 网站。我正在关注这里的教程:

http://www.thecodingguys.net/tutorials/asp/webpages-membership-forgot-password-and-reset-password

我已经能够生成令牌并成功发送电子邮件

然后,这封电子邮件让我通过如下链接进入重置密码视图:

~/Account/resetpassword?token=fujgFIo7k27c72-UTTJeGA2fujgFIo7k27c72-UTTJeGA2

现在,这是我的 HttpGet 方法

    [AllowAnonymous]
    [HttpGet]
    public ActionResult resetpassword()
    {
        ResetPasswordModel model = new ResetPasswordModel()
        {
            Password = String.Empty,
            ConfirmPassword = String.Empty,
            Token = String.Empty
        };
        return View(model);
    }

它所做的只是传入模型的一个实例

我对 resetpassword.cshtml 的看法

@model RazorARPP.Models.ResetPasswordModel
@{    
    var token = Request["token"];
    Model.Token = token;
}



<form action="" method="post" enctype="multipart/form-data" id="MyForm">
@Html.ValidationSummary(true)
<fieldset>
<legend>Reset Password</legend>
@Html.HiddenFor(m => m.Token)
@Html.LabelFor(m => m.Password)
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessage("password")

<br/>

@Html.LabelFor(m => m.ConfirmPassword)
@Html.PasswordFor(m => m.ConfirmPassword)
@Html.ValidationMessage("confirmPassword")

<input type="submit"/>

</fieldset>
</form>

现在我的 HttpPost 方法

[AllowAnonymous]
    [HttpPost]
    public ActionResult resetpassword(ResetPasswordModel model)
    {
        if (model.Password == model.ConfirmPassword)
        {
            WebSecurity.ResetPassword(model.Token, model.Password);
        }
        return RedirectToAction("Login");
    }

它执行得很好,但重置密码不起作用。我确保该行正在调试器中运行。关于我做错了什么的任何建议?谢谢

4

3 回答 3

2

您如何生成重置令牌?您是否使用正确的用户名?

WebSecurity.GeneratePasswordResetToken(model.Email)

在生成令牌并立即将其传递给WebSecurity.ResetPassword. 我猜resetpassword是没有得到你期望的值

于 2012-12-19T20:12:59.917 回答
1

问题在于电子邮件在发送重复的令牌时。

 var confirmationUrl = hostUrl + VirtualPathUtility.ToAbsolute("~/Account/resetpassword?token=" + token +  HttpUtility.HtmlEncode(token));

应该是这样的

 var confirmationUrl = hostUrl + VirtualPathUtility.ToAbsolute("~/Account/resetpassword?token=" +  HttpUtility.HtmlEncode(token));

现在一切都应该工作了!

看你自己的网址

~/Account/resetpassword?token=fujgFIo7k27c72-UTTJeGA2fujgFIo7k27c72-UTTJeGA2

令牌是重复的,这就是问题所在。

于 2012-12-23T17:27:06.060 回答
0

如果输入的密码不符合密码规则,此调用将失败(返回 false)。检查您的会员资格提供商的配置文件中的哪些设置。

同样取决于会员资格提供商,如果帐户被锁定,它可能会返回 false - 但我现在无法验证。

于 2016-08-18T01:57:33.210 回答