2011-06-13 1255 views
2

成员资格提供ValidateUser使用EF很简单如何比较EF中区分大小写的字符串?

public override bool ValidateUser(string username, string password) 
{ 
    // Validate User Credentials 
    var r = db.ST_Users.FirstOrDefault(
          x => x.Username.Equals(username) && 
           x.Password.Equals(password)); 
    return r != null ? true : false; 
} 

但是,如果使用balexandreBAleXanDre这个返回true(查找和检索对象洞)不管。

如何启用EF以区分大小写模式进行比较?

我知道如何在不区分大小写的比较(使用StringComparison.CurrentCultureIgnoreCase超载,但我只是想对面)

回答

8

你不应该上的密码查询。您应该检索User对象并在本地进行密码比较,因为默认情况下SQL Server将为您执行不区分大小写的比较(除非更改数据库设置,这不应该轻松采取)。

var r = db.ST_Users.SingleOrDefault(x => x.Username == username); 

return r != null && r.Password == password; 

此外,您似乎将简单的密码存储在您的数据库中。根据应用程序的类型,这可能不是一个好主意。尝试用盐对它们进行哈希处理。很多很好的信息可以在Stackoverflow上找到。例如,看看this questionthis website

+2

+1是的答案和建议两者。向索尼,ECI以及所有其他已经提供新闻的公司学习 - 不要存储纯文本密码! – JasCav 2011-06-13 20:43:38

+1

我使用'BCrypt'来存储我的密码,这个问题只有一个简单的例子。会奇怪,以我的名誉,我不会知道/存储敏感数据的正确方法! – balexandre 2011-06-13 21:41:42

+0

@balexandre:我对'BCrypt'不熟悉,但是如果你在数据库中以散列形式存储你的密码,你不会有任何字符串不敏感的字符串比较问题,所以在我看来你并没有存储你的哈希形式的密码。也许你正在加密你的密码,而不是哈希安全。此外,为什么你想能够解密你的用户密码? – Steven 2011-06-14 06:49:12

0

你试过

x => x.Username == username && x.Password == password 

而是采用Equals()的?

也许this post可以帮助您进一步

0

我正面临同样的问题。我试过:

1. from p in entity.SecurityUsers where p.userName.Equals(userName) && p.password.Equals(password) select p 
2. from p in entity.SecurityUsers where p.userName == userName && p.password == password select p 

但是这两个都没有奏效。然后,我选择USER只..,

var user = (from p in entity.SecurityUsers where p.userName == userName select p).first(); 

,然后比较其密码:

return p != null && p.Password == password; 
相关问题