2014-10-28 50 views
1

我想評估用戶和密碼,但我得到了相同的結果,如果我使用大寫或小寫,數據庫區分大小寫,但它會一直忽略該配置這是我的代碼:查詢大小寫敏感首先默認C#mvc4

public ActionResult Login(Model.user user){ 

    bool isValid=false; 
    var user= db.users.FirstOrDefault(u=>u.user==user.user && u.password==user.password) 
    if(user!=null){ 
     isValid=true;   
    } 
} 

我在做什麼錯?

+0

_ _ - 存儲密碼的明文和滾動自己的 「什麼是我做錯了什麼?」認證系統。不要重新發明輪子,尤其不要在安全敏感的環境中。 – CodeCaster 2014-10-28 11:33:48

+0

顯然我沒有這樣的密碼,我的問題是,我鍵入資金或小寫的用戶名或密碼,它可以讓我在網站訪問,我需要做一個區分大小寫的搜索@CodeCaster – DuSant 2014-10-28 14:03:27

回答

1

試試這個: -

var query = users.FirstOrDefault(u => u.UserName == user.UserName && String.Compare(u.Password, user.Password,false) == 0); 

工作Fiddle

按OP的問題(對DB型): -

var query = db.Users.ToList().Where(x => (string.Compare(x.UserName, user.UserName, false) == 0) && (string.Compare(x.Password, user.Password, false) == 0)).FirstOrDefault(); 
+1

這可能無法正常工作,如果您在數據庫上查詢它,並且數據庫配置爲「不要敏感」。 – 2014-10-28 11:01:51

+0

如果數據庫被配置爲「NOT TO BE CASE SENSITIVE」(默認情況下SQL不是CASE SENSITIVE),則會拋出以下錯誤... 方法'布爾等於system.string system.stringcomparison'沒有支持的轉換到SQL – 2014-10-28 11:11:51

+0

@DotNetIsMyPower - 我正在考慮實體是基於對象而不是基於SQL的,如果OP需要比較密碼,他可以比較基於SQL的LINQ中的用戶名,然後在基於對象的LINQ中轉換廣告比較。已經更新了代碼。 – 2014-10-28 11:21:06

0

嘗試這種方式

var result = from userlist in context.UserMasters 
      where userlist.UserName.Equals(username) 

// May be better (if usernames are unique): 
var result = context.UserMasters.SingleOrDefault(u=>u.UserName == username); 

if(result == null){ 
    // Did not find any user(s) 
} 

// If you want a case sensitive password check 
if(result.UserPassword == pass){ 
    // The password is correct 
} 
else 
{ 
     throw new Exception("Invalid password"); 
} 

// If you don't 
if(result.UserPassword.Equals(pass, StringComparison.InvariantCulture)){ 
    // The password is correct 
}