是否有密码历史记录的默认实现?我正在尝试使用身份在我的项目上实现该功能,因此我添加了包含密码哈希的密码历史记录表。当用户更改密码时,usermanager会为密码生成哈希值。
var passwordHash = _userManager.PasswordHasher.HashPassword(user, newPassword);
如果此密码未插入密码历史记录表中,则允许更改密码,否则返回错误
但问题是每次为特定密码生成哈希时它会产生无法比较的随机哈希
var passwordHash = _userManager.PasswordHasher.HashPassword(user, newPassword);
哈希与
不同 _userManager.ResetPasswordAsync(user, request.Token, password);
生成密码哈希。
可能是我试图以错误的方式做到这一点。我实施密码历史的错误是什么?
谢谢
答案 0 :(得分:1)
每次都有不同的哈希值-这就是默认实现IPasswordHasher
的工作方式。请查看以下答案以获取更多详细信息:https://stackoverflow.com/a/20622428/6104621。
因此,对于您的实施密码历史记录,您可以实施IPasswordHasher
或仅使用方法PasswordVerificationResult VerifyHashedPassword(TUser user, string hashedPassword, string providedPassword);
用所有存储的密码哈希验证新密码
例如:
var passAlreadyExist = user.UserHistory
.Select(h => h.PasswordHash)
.Distinct()
.Any(hash =>
{
var res = manager.PasswordHasher.VerifyHashedPassword(user, hash, password);
return res == PasswordVerificationResult.Success;
});
其中UserHistory
-这是自定义表,其中包含一些用户信息,例如密码,电子邮件,名称 ...