Asp.Net Identity 2无法重置明文密码



我正在为一个俱乐部网站建立一个管理部分。我需要能够允许与管理员权限重置用户密码的人。我还希望管理员能够以明文形式看到用户的密码,因为在我们的场景中,直接告诉用户当前密码更容易,而不是通过电子邮件重置密码。我知道使用电子邮件确认进行双因素身份验证将是一种更安全的方式,但我不想处理用户交互和确认电子邮件,至少现在不想。我只需要管理员能够直接重置密码,如果需要,以及只是能够看到密码。

话虽如此,我终于能够想出这样做的代码。但是,当我在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();
}

以明文形式存储密码总是一个坏主意。我理解这种诱惑,因为它使您(或管理员)的生活更轻松,但是您确实对使用您网站的用户负有责任。

很多人都很懒,会在多个地方重复使用相同的密码,如果你的网站以明文形式存储密码,就会被泄露。这次入侵可能比你的网站更糟糕。更不用说让管理员看到他们的密码会侵犯隐私。

最新更新