我正在开发一个MVC5 web应用程序,它使用实体框架数据库优先方法和现有的数据库。
我也在使用ASP.Net Identity进行授权和身份验证,但是,我没有使用内置的实体框架代码,即UserManager、ApplicationUser等,而是使用了一种类似于Brock的方法。
我现在正在处理帐户登录和注册,我想在我存储到我的自定义用户表之前,对用户密码进行散列。
我意识到我可以创建自己的自定义类来实现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方法中,就像这样,我希望用户密码被散列并以字符串的形式返回,但是,我不知道在account函数中放入什么代码才能做到这一点。
CustomPassword pwd = new CustomPassword();
String UserPassword = "test@123";
String HashedNewPassword = pwd.HashPassword(UserPassword);
Q2:当用户登录到网站时,我想使用他们提供的密码,从数据库用户表中检索散列密码,然后在VerifyHashedPassword方法中比较它们,但同样,我不知道将散列字符串与非散列字符串进行比较的代码是什么。
我非常感谢任何关于如何做到这一点的建议。
谢谢。
发布于 2014-02-05 18:09:22
创建UserManager实例后,将passwordhasher属性分配给CustomPasswordHasher
UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(store);
UserManager.PasswordHasher = new CustomPasswordHasher(); // IPasswordHasher
使用UserManager查找具有用户名和密码的用户。
https://stackoverflow.com/questions/21530418
复制相似问题