2016-05-26 57 views
1

認証モジュールで作業していますが、私はこの奇妙な問題を抱えています。Auth::attemptはfalseを返します。ユーザー名とパスワードは正しいです。Laravel 5.2:認証auth :: attemptがfalseを返します

同じquestionもここに尋ねられますが、それは私の問題に対処していないので、その問題はlaravel 4に関するものです。

$user = array(
    'name' => Input::get('username'), 
    'password' => Input::get('password') 
); 
if (Auth::attempt($user)) { 
    return "ok."; 
} else { 
    dd($user); 
} 

他の部分を返します:

は、私は私のコントローラで次のコードを持って

array:2 [▼ 
    "name" => "ali" 
    "password" => "ali" 
] 

nameを意味し、パスワードが正しいです。

私はlaravel 5.2を使用しています。私のusersテーブルには、パスワードがハッシュされておらず、remember_tokenはありません。つまり、私はuserを直接作成しました。

答えて

1

auth :: attemptはパスワードをbcryptを使用してハッシュに変換し、一致するユーザーテーブルのハッシュを検索するため、これは機能しません。

要するに、パスワードは認証のためのデータベーステーブルに保存されたハッシュでなければなりません::試みてください。

これはif()条件が失敗する理由です。

は以下laravelから5.2ドキュメント

試行方法は、その最初の 引数としてキー/値のペアの配列を受け入れています。配列内の値は、データベーステーブル のユーザーを見つけるために使用されます。したがって、上記の例では、ユーザは というメール列の値で取得されます。ユーザーが見つかると、データベースに格納されている ハッシュされたパスワードが、 ハッシュされたパスワード値と比較され、配列を介してメソッドに渡されます。 2つのパスワードがハッシュされたパスワードが一致すると、ユーザーは の認証セッションが開始されます。

認証が成功した場合、試行メソッドはtrueを返します。 それ以外の場合は、falseが返されます。

+0

私はそれをチェックさせてください。 – Gammer

+0

https://laravel.com/docs/5.2/authentication#authenticating-users –

+1

開発の初期段階でまだ登録機能を構築していないが、依然として認証をテストしたい場合は、ハッシュでパスワードをエコーすることができます:: make( 'password')またはbcrypt( 'password)(私は頭を下げて)データベースに手動で挿入してください。 –

2

試行方法はパスワードをデータベースと比較する前にハッシュします。つまり、データベースのパスワードがハッシュされていない場合、一致しません。

関連する問題