我有一个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不起作用。我确保该行在调试器中运行。关于我做错了什么的任何建议?感谢
答案 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 - 但我现在无法验证。