私は最近、Webホスティングサービスで公開したasp.net MVC Webサイトを持っています。ほとんどすべてのものがうまく機能し、私のmsSQLデータベースから得た情報はページなどに表示されています。しかし、問題が1つあります。自分のWebサイトにログインしようとしても、うまくいきません。これ以上説明する前に、ユーザーログインを認証する方法を示す次のコードを確認する必要があります。
public ActionResult Login()
{
return View();
}
[HttpPost, ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model)
{
if (ModelState.IsValid)
{
if (Repository.AuthenticateLogin(model.Username, model.Password.GetHashCode().ToString()))
{
FormsAuthentication.SetAuthCookie(model.Username, false);
return RedirectToAction("Index", "Home");
}
else
{
TempData["WrongLogin"] = "The username or password you've entered is wrong. Please try again!";
return View(model);
}
}
else
{
return View(model);
}
}
そして、上記のif文で使用されているメソッド "AuthenticateLogin(string username、string password)は、次のようになります。
public static bool AuthenticateLogin(string username, string password)
{
using (var context = new SHultEntities())
{
return (from u in context.User
where u.Username == username && u.Password == password
select u).Any();
}
}
ご覧のとおり、ユーザーを認証するために、入力したユーザー名とパスワードをデータベースのユーザーテーブル内の任意のユーザーと照合しています。一致した場合、メソッドは "true"を返すか、それ以外の場合は "false"を返します。ええ、あなたはそれを手に入れました。
問題は、私のサイトにログインしようとするとTempData ["WrongLogin"]というテキストが表示されることです。これは、AuthenticateLoginメソッドがfalseを返したことを意味します。つまり、一致があってはいけません。しかし、同じユーザー名とパスワードを使用して、コンピューター上のローカルプロジェクトでこれを試すと、AuthenticateLoginはtrueを返します。
データベースへの接続に問題がある場合は、データベースから取得したヘッダーとコンテンツがサイトに表示されません。しかしそうです。また、ローカルプロジェクトから何かを更新してからWebサイトにアクセスすると、更新された情報が表示されます。だから、唯一の問題は私がログインできないということです。
これは私を狂わせるものであり、私は本当に助けをいただければと思います。
編集:私は私のウェブサイトにログインしなければならないことを言及する価値があるかもしれませんコンテンツ/情報を編集する。ローカルプロジェクトからログインして変更することができると述べたのはそのためです。その後、変更内容がWebサイトに表示されます。
発見された問題ハッシュ化されていないパスワードを使用してユーザーを作成し、そのパスワードのAuthenticateLoginから.GetHashCode.ToString()を削除しました。それから私は再発行しました。できます。問題はハッシュです。
どうすればこれを解決できますか?私はデータベースのハッシュパスワードが必要です...
データベースにユーザー名とパスワードをどのようにシードしましたか? password.GetHashCode()の実装がマシン固有のものである(つまり、マシン固有のsaltに依存している)場合、これがすべてのユーザーに対して一致できない理由である可能性があります。一方、ユーザーがリモート(ホスト型)環境を介して作成されている場合は、これは問題になりません。
問題は私のハッシュによるものです。偶然にも、まったく同じに見える2つの文字列は、ハッシュされたときに異なる値を生成する可能性があります。.GetHashCode()異なるマシン上(マシンが同じバージョンのフレームワークを使用している場合でも)。
詳細については、ここをクリック!
カスタマイズしたHashingクラスを使用して問題を解決しました。