2016-04-27 7 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);を呼び出して、あなたのコントローラに

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

ですが、戻り値をチェックすることはありません値はudb.loginUserなので、ユーザー名とパスワードが何であっても、コードは常にホームページにリダイレクトされます。

ログインが失敗した場合loginUserメソッドのコードに基づいて、それが空の文字列を返しますので、

以下
var loginResult = udb.loginUser(form.Username, form.Password); 
if (!string.IsNullOrEmpty(loginResult)) 
{ 
    Session["userName"] = form.Username; 
    return RedirectToRoute("Home"); 
} 
に上記のコードの3行を変更します