2017-03-16 9 views
1

アルゴリズムは機能しますが、パスワードがハッシュに変換されてデータベースに保存されると、ホームページにリダイレクトされません。代わりに、ログインクレデンシャルが正しくないことを示すログインページにリダイレクトされます。しかし、ログインしようとすればOKです。私は間違って何をしていますか?Laravelでmd5をハッシュに移行する際のバグ

AuthenticatesUsers.phpは

protected function attemptLogin(Request $request) 
{ 
    $check = $this->guard()->attempt(
     $this->credentials($request), $request->has('remember') 
    ); 
    if ($check === false) 
    { 
     $user = User::where('username','=',$request->input('username'))->first(); 

     if(isset($user)) { 
      if($user->password == md5($request->input('password'))) { // If their password is still MD5 
       $hashed_password = Hash::make($request['password']); // Convert to new format 
       $user->password = $hashed_password; 
       $user->save(); 

       return $this->guard()->attempt(
        array(
         'username'=>$request->input('username'), 
         'password'=>$hashed_password 
        ), $request->has('remember') 
       ); 

      } else { 
       // Redirect to the login page. 
       return false; 
      } 
     } 
    } 
    return $check; 
} 
+0

あなたは 'md5 hashed password'を使ってログインできると思っていますか? –

+0

ええ、私は現在のmd5をlaravelのハッシュに置き換えています。しかし、問題はそれ以降です。 – EatCodePlaySleep

+0

データベース内の既存のmd5パスワードを 'laravel hashing'に変換する必要がありますか? if(password_verify($ request-> input( 'password')、$ user-> password)) 'と言ってみてください。 –

答えて

2

attemptは、それはあなたがユーザからになるだろうパスワード(プレーンテキストのパスワード)を取り、ハッシュされたパスワードを負いません。ユーザーはパスワードのハッシュバージョンを知らず、attemptはプレーンテキストバージョンを必要とするハッシュチェックを行います。

すでにユーザーとその資格情報を検証し、それらを表すUserインスタンスを持っている場合は、attemptに再度呼び出す必要はありません。その時点でログインするには、loginを使用してください。あなたはattemptを通過する必要はありません。データベースを再クエリーしてユーザーを取得し、次に設定してから正しいことが分かっているハッシュをチェックします。

コードの一部には、attemptが内部で行うことを再作成するだけです。

また、ユーザーにデータベースを照会する必要もありません。 attemptへの最初の呼び出しは、データベースを照会したときに見つかった「ユーザー」に保持されます。あなたはガードからそれを取り出すことができるので、データベースに再度照会する必要はありません。$this->guard()->getLastAttempted()

これらの変更を加えると、もう呼び出されないため、2回目のattemptコールからの「不正な資格情報」の問題が削除されます。これにより、3つの選択肢と1つの更新から1つの選択と1つの更新までのクエリも削減されます。 (おおよそ)

+0

私は、説明の男のおかげで、データベースに保存した後に行ったことがあります。 \t \t \t \t '$ request-> session() - > regenerate(); \t \t \t \t $ this-> clearLoginAttempts($ request); \t \t \t \t Auth :: login($ user、true); ' – EatCodePlaySleep

関連する問題