2011-06-13 169 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; 
相關問題