我正在使用实体框架数据库优先方法使用现有数据库开发 MVC 5 Web应用程序。
我也在使用 ASP.Net Identity 进行授权和身份验证,但是,我没有使用内置的实体框架代码,即 UserManager , ApplicationUser 等我正在使用Brock Allen的类似方法。
我现在正在进行帐户登录和注册,我希望哈希用户密码,然后再将其存储在我的自定义用户表中。
我意识到我可以创建自己的自定义类来实现 IPasswordHasher ,但是,这就是我陷入困境的地方。下面显示了我认为它应该如何工作的模拟,但是,我并不完全确定这是正确的。
public class CustomPassword : IPasswordHasher
{
public string HashPassword(string password)
{
return password;
}
public PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword)
{
if (hashedPassword.Equals(providedPassword))
return PasswordVerificationResult.Success;
else return PasswordVerificationResult.Failed;
}
}
这是我的问题:
Q1 :注册新用户帐户时,我会传递用户密码 从我的帐户控制器进入HashPassword方法,像这样, 我希望用户密码哈希并以字符串形式返回, 但是,我不知道要在 HashPassword 中输入什么代码 这样做的功能。
CustomPassword pwd = new CustomPassword();
String UserPassword = "test@123";
String HashedNewPassword = pwd.HashPassword(UserPassword);
Q2 :当用户登录网站时,我想提取他们提供的密码,从数据库用户表中检索哈希密码,然后在 VerifyHashedPassword中进行比较方法,但同样,我不知道将散列字符串与非散列字符串进行比较的代码是什么。
我非常感谢有关如何做到这一点的任何建议。
感谢。
答案 0 :(得分:22)
创建UserManager实例后,将passwordhasher属性分配给CustomPasswordHasher
UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(store);
UserManager.PasswordHasher = new CustomPasswordHasher(); // IPasswordHasher
使用UserManager查找用户名和密码。