密码历史记录有任何默认实现吗?我正在尝试使用身份在我的项目上实现该功能,因此我添加了包含密码哈希的密码历史记录表。当用户更改密码时,usermanager 生成密码哈希。var passwordHash = _userManager.PasswordHasher.HashPassword(user, newPassword);
如果此哈希未插入密码历史表中,则允许更改密码,否则返回错误
但问题是每次为特定密码生成哈希时,它都会生成无法比较的随机哈希var passwordHash = _userManager.PasswordHasher.HashPassword(user, newPassword);
哈希不同于_userManager.ResetPasswordAsync(user, request.Token, password);
生成的密码哈希。
可能是我试图以错误的方式做到这一点。我在实现密码历史记录时犯了什么错误?
谢谢
最佳答案
每次都有不同的哈希值 - 这是默认实现的方式 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
- 它是带有一些用户信息的自定义表,如密码、电子邮件、姓名...
关于asp.net-core - Identity Core 的密码历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48783202/