2016-04-27 159 views
1

我試圖解密登錄方法的密碼,但它允許用任何密碼登錄我輸入,不知道爲什麼,也許有人可以幫我嗎? 在DB層我的登錄方法:Bcrypt密碼驗證

public string loginUser(string userName, string pass) 
{ 
    string result = ""; 

    try 
    { 
     var mongoClient = new MongoClient("mongodb://localhost"); 
     var database = mongoClient.GetDatabase("SearchForKnowledge"); 
     var coll = database.GetCollection<BsonDocument>("Users"); 

     var filter = Builders<BsonDocument>.Filter.Eq("userName", userName); 
     var results = coll.Find(filter).ToList().First(); 
     if (BCrypt.Net.BCrypt.Verify(pass, results["password"].ToString())) 
     { 
      result = results["userName"].ToString(); 
     } 
    } 
    catch (Exception ex) 
    { 
     result = ""; 
    } 
    return result; 
} 

我的用戶控制器:

public ActionResult Login(UsersLogin form) 
{ 
    User user = new User(); 
    UserDB udb = new UserDB(); 

    if (!form.Username.IsEmpty()) 
    { 
     udb.loginUser(form.Username, form.Password); 
     Session["userName"] = form.Username; 
     return RedirectToRoute("Home"); 
    } 
    return RedirectToRoute("Login"); 
} 

回答

1

的問題是在您的控制器

udb.loginUser(form.Username, form.Password); 
Session["userName"] = form.Username; 
return RedirectToRoute("Home"); 

你叫udb.loginUser(form.Username, form.Password);,但你永遠不檢查返回值爲udb.loginUser方法,所以無論用戶名和密碼是什麼,您的代碼總是會重定向到主頁。

基於loginUser方法的代碼,如果登錄失敗,它將返回一個空字符串,所以改變上述三個行的代碼下面

var loginResult = udb.loginUser(form.Username, form.Password); 
if (!string.IsNullOrEmpty(loginResult)) 
{ 
    Session["userName"] = form.Username; 
    return RedirectToRoute("Home"); 
}