-1

私は UserManager Model を持っています。それは次のようになります:

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 になります。誰か助けてください。事前に感謝します..

4

1 に答える 1

2

簡単なデバッグを行う必要があります。

いえ

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

更新: コメントから

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

次のように、パスワードを返すときにパスワードをトリミングすることで問題を解決できます。

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

ただし、データベースの列の種類に nvarchar を使用すると、空白のパディングの問題が発生しなくなります。

ボーナス: GetUserPassword メソッドでは、userIQueryable コレクションを 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;
    }
}
于 2012-04-27T18:03:31.387 に答える