2012-04-27 11 views
-1

IましたUserManager Model.itの次のようになります。のasp.net MVC 3条件が常にfalseを返す

public class UserManager 
{ 
    private ToLetDBEntities TLE = new ToLetDBEntities(); 
    public string GetUserPassword(string usermail) 
    { 
     var user = from o in TLE.users where o.email_add == usermail select o; 
     if (user.ToList().Count > 0) 
     { 
      return user.First().password; 

     } 
     else 
      return string.Empty; 
    } 
} 

と私はしましたAccountControllerのように:

public class AccountController : Controller 
{ 
    [HttpPost] 
    public ActionResult LogOn(UserLogOn model) 
    { 
     if (ModelState.IsValid) 
     { 
      UserManager um = new UserManager(); 
      string pass = um.GetUserPassword(model.email_add); 

      if (model.password==pass) 
      { 
       FormsAuthentication.SetAuthCookie(model.email_add, false); 
       return RedirectToAction("Welcome", "Home"); 
      } 
      else 
      { 
       ModelState.AddModelError("", "The provided password is incorrect."); 

      } 

     } 

     return View(model); 
    } 
} 

と私はしましたUserLogonモデルには(email_add、password)が含まれています。このコントローラーを実行すると、常に「提供されたパスワードが間違っています」というエラーメッセージが表示されます。 if(model.password == pass)この条件は常にfalseを返します。誰も助けてください。先進的でありがとう。

+0

がGetUserPasswordから保存されたパスワードは()ハッシュ化または暗号化されていますか? – Tuan

+1

あなたは簡単なデバッグを行う必要があります。つまり、GetUserPasswordでは、ユーザーは== nullになりますか、ユーザーが戻ってきますか?ユーザーが戻った場合 - パスワードプロパティの値は何ですか? – Charlino

+0

パスワードは単にデータベースのnchar型です。私はそのパスワードがnullか空でないことを確認しました。 –

答えて

2

簡単なデバッグが必要です。

I.e.

  • GetUserPasswordでは、ユーザーは== nullですか、またはユーザーと一緒に戻ってきますか?
  • ユーザーが戻った場合 - パスワードプロパティの値は何ですか?

UPDATE:コメント

から、あなたは、データベースの列の型としてNCHAR(15)を使用しているため、データベースから来ている文字列は、余分な空白で埋められます。

あなたはそれを返すときには、パスワードをトリミングすることによって、問題を解決することができ - そのよう:

return user.First().password.Trim(); 

しかし、より良い修正がデータベース列のタイプにnvarchar型を用いることであろうと、あなたは持っていません空白埋め込みの問題。

BONUS:GetUserPasswordメソッドでは、user IQueryableコレクションを2回列挙しています。これにより2回のDB呼び出しが行われます。それを避けるために、このようなものに

変更を:

public class UserManager 
{ 
    private ToLetDBEntities TLE = new ToLetDBEntities(); 
    public string GetUserPassword(string usermail) 
    { 
     var user = TLE.users.FirstOrDefault(x => x.email_add == usermail); 
     if (user != null) 
     { 
      return user.password; 

     } 
     else 
      return string.Empty; 
    } 
} 
+0

それは働いていません.. –

+0

私もUserManagerでこれを試しました:string pass = um.GetUserPassword(model.email_add); if (pass == null || pass.Length == 0) { return RedirectToAction("Welcome", "Home"); }それは同じエラーを与えます。 –

+0

私の更新を見てください。また、 'if(pass == null || pass.Length == 0)'を実行する代わりに 'if(string.IsNullOrWhitespace(pass))'を実行することができます。 – Charlino

関連する問題