Razor Token ResetPassword不工作

时间:2012-12-19 20:02:44

标签: c# asp.net-mvc asp.net-mvc-3 security razor

我有一个MVC3 Razor网站。我在这里遵循教程:

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

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

然后,电子邮件让我在以下链接中转到resetpassword视图:

〜/ 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");
    }

它执行正常,但resetpassword不起作用。我确保该行在调试器中运行。关于我做错了什么的任何建议?感谢

3 个答案:

答案 0 :(得分:2)

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

WebSecurity.GeneratePasswordResetToken(model.Email)

进行测试,生成令牌并立即将其传递给WebSecurity.ResetPassword。我猜resetpassword没有得到你期望的值

答案 1 :(得分:1)

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

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

应该是这样的

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

现在一切都应该工作了!

查看您自己的网址

〜/帐户/ resetpassword?标记= fujgFIo7k27c72-UTTJeGA2fujgFIo7k27c72-UTTJeGA2

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

答案 2 :(得分:0)

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

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