1

我使用 BCrypt 来散列密码。在我的登录查询中,我检查密码:

var kier = (from b in baza.Logowanies where b.Login == model.Użytkownik && BCryptHelper.CheckPassword(model.Hasło, b.Haslo) && b.konto == "kierownik" select b).Any();

在编译期间我有一个错误:

方法 'Boolean CheckPassword(System.String, System.String)' 不支持对 SQL 的转换。

我该如何解决这个问题?

4

1 回答 1

3

您正在使用 Linq-to-SQL,这意味着您的 Linq 查询正在被转换为针对数据库运行的 SQL 语句。SQL 中没有 CheckPassword。您首先必须从数据库中加载用户,而不进行密码哈希检查。然后进行哈希检查。就像是:

var user = (from b in baza.Logowanies where b.Login == model.Użytkownik && b.konto == "kierownik" select b).FirstOrDefault();
if (user != null && BCryptHelper.CheckPassword(model.Hasło, user.Haslo))
{
    // Do login.
}
else
{
    // Fail login.
}

请注意,这里存在语言障碍,我可能做出了一些错误的猜测。

于 2011-11-08T11:58:23.253 回答