我正在为俱乐部网站建立一个管理员。我需要能够允许具有管理员权限的人重置用户密码。我还希望让管理员能够以明文形式查看用户的密码,因为在我们的场景中,更容易告诉用户他们当前的密码是什么,而不是通过电子邮件重置密码。我知道使用电子邮件确认进行双因素身份验证将是一种更安全的方式,但我不想处理用户交互和确认电子邮件,至少目前不是这样。我只需要管理员能够直接重置密码,如果需要,只需能够看到密码。
话虽如此,我终于能够提出代码来做到这一点。但是,当我在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();
}
答案 0 :(得分:2)
以明文形式存储密码始终是一个坏主意。我理解这种诱惑,因为它会让您(或管理员)的生活变得更轻松,但是您对使用您网站的用户负有责任。
如果您的网站以明文形式存储密码并且遭到入侵,很多人都很懒,会在多个地方重复使用相同的密码。这个漏洞可能比你的网站更糟糕。更不用说通过让管理员看到他们的密码来破坏隐私。