【发布时间】:2017-01-29 02:19:45
【问题描述】:
我正在为一个俱乐部网站构建一个管理部分。我需要能够允许具有管理员权限的人重置用户密码。我还希望管理员能够以明文形式查看用户的密码,因为在我们的场景中,只需告诉用户他们当前的密码是什么而不是通过电子邮件重置密码更容易。我知道使用电子邮件确认进行两因素身份验证将是一种更安全的方式,但我不想处理用户交互和确认电子邮件,至少现在不是。我只需要管理员能够在需要时直接重置密码,并且能够看到密码。
话虽如此,我终于能够想出代码来做到这一点。但是,当我在 Identity 中使用 ResetPasswordAsync 方法时,它似乎没有更新 AspNetUsers 表中的 PasswordClearText 字段。我已经通过更改密码、注销、使用新密码重新登录来验证这一点,然后仍然看到 PasswordClearText 具有原始密码。
有没有办法重置 PasswordClearText?
这是我的代码
[HttpPost]
[ValidateAntiForgeryToken]
public async System.Threading.Tasks.Task<ActionResult> PasswordReset(MemberPasswordReset model)
{
ApplicationDbContext context = new ApplicationDbContext();
UserStore<ApplicationUser> userStore = new UserStore<ApplicationUser>(context);
var UserManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
var user = await UserManager.FindByNameAsync(model.Username);
string resetToken = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
IdentityResult passwordChangeResult = await UserManager.ResetPasswordAsync(user.Id, resetToken, model.Password);
if(passwordChangeResult.Succeeded)
{
return RedirectToAction("Index");
}
AddErrors(passwordChangeResult);
return View();
}
【问题讨论】:
-
我讨厌纯文本密码,但您似乎决心实现它。因此,我将向您轻推
IPasswordHasher。
标签: asp.net asp.net-mvc-5 asp.net-identity-2