试图获得密码重置功能。这适用于尚未也无法登录系统的用户。我想我很接近,但感觉不对:
我有一个 ResetPassword 方法/视图...它只是询问用户的电子邮件地址,不向用户确认帐户,但如果存在,发送带有链接+令牌的电子邮件。这一切都很好。
下一部分是我的问题所在......我使用这种方法收到密码令牌(通过单击用户的电子邮件链接):
[HttpGet]
public ActionResult ReceiveResetToken(string token)
{
try
{
if (!String.IsNullOrEmpty(token))
{
var username = (from u in db.Users
where u.Userid == WebSecurity.GetUserIdFromPasswordResetToken(token)
select u.Email).ToString();
if (!String.IsNullOrEmpty(username))
{
WebSecurity.ConfirmAccount(token);
}
}
RedirectToAction("Index", "Home");
}
catch (Exception)
{
throw;
}
}
我在这里遗漏了一些明显的东西。该方法不完整,因为我一直在重新考虑它...获取用户名,确认帐户,以某种方式登录他们而不知道他们的密码是什么,重定向到更改密码页面?感觉不对。
因此,我想也许可以将带有 ViewBag 的隐藏用户名传递给更改对话框……感觉也不对。我想要一种更优雅的方法,接收令牌,向用户名询问新密码,更新数据库并登录。接收密码重置令牌的模式是什么?
编辑 - - - -
因此,当我继续寻找答案时,我遇到了这个小宝石。显然有一个接受令牌和新密码的 WebSecurity.ResetPassword 方法。这感觉是正确的路径,无需担心登录,只需更改它并重定向到登录...我将完成代码并发布解决方案,因为这似乎是一个流行且经常未回答的问题。
如果有人能确认我走在正确的道路上,或者发表任何关于为模式添加优雅的想法,那就太酷了