在DbSet上查询调用密码设置器



我有一个MVC4 web应用程序与DbSet的用户。Context初始化器在数据库中使用密码"password"播种一些示例用户。下面的setter在User中被调用:

private string _password;
public string Password {
    get { return _password; }
    set {
        //Password checks here
        _password = Crypto.HashPassword(value);
    }
}

密码散列很好。在AccountController的Login操作中,我首先从数据库中获取User,然后检查是否输入了正确的密码:

User u = repos.FindBy(model.Email);
if (ModelState.IsValid && g != null && u.IsPasswordCorrect(model.Password)) {

FindBy这样做:

return users.FirstOrDefault(u => u.Email.Equals(email))

用户被发现很好,但是我通过调试发现,这个对DbSet的查询调用用户的密码设置器,并将散列密码作为值??所以密码被哈希两次…第一次是在使用密码"password"为示例用户提供种子时,第二次是在该查询使用已经散列的值调用它时。这就是为什么IsPasswordCorrect失败,我无法登录。: - (

根据这个DbContext调用setter来初始化dbset,但是为什么当我查询它时调用它?把它设为私有setter并没有帮助。

任何想法都非常感谢!由于

好吧,我不认为这是最干净的解决方案(因为我现在基本上有一个双setter),但它至少工作得很好:-)

public string Password { get; set; }
public void SetPassword(string password) {
    //Password checks
    Password = Crypto.HashPassword(password);
}

最新更新