web-dev-qa-db-ja.com

Laravel 5認証:これらの認証情報がレコードと一致しません

私はLaravel 5から始めたばかりですが、Laravel 4環境から来ているので、それほど難しくはないはずです。

L5にはすっきりとした認証システムが組み込まれているそうです。データベースからビューまですべてを設定しました。

登録プロセスは正しく機能しており、その後自動的にログインします。しかし、ログアウトして再度ログインしようとすると、次のエラーが発生します。

これらの資格情報は、当社の記録と一致しません。

何が悪いのかわかりません。ログインコントローラを手動で作成する必要がありますか、それともL5でどのように機能しますか?

5
Halnex

私も同じ問題を抱えていました。私の理由は、setPasswordAttributeモデルでUserを定義したため、毎回プレーンパスワードを入力し、DBに送信する前にハッシュするためです。

_public function setPasswordAttribute($password)
{
    $this->attributes['password'] = \Hash::make($password);
}
_

また、db:seedでは、Hash::make("password")を使用してハッシュされたパスワードを使用してユーザーを作成していました。したがって、laravelハッシュされたパスワードをハッシュします:)

laravelバージョン5. *では、Authがそれ自体を管理するため、Authの入力パスワードをハッシュする必要はありません。フォームを介して{{csrf_field()}}を渡すだけです。

16
mervasdayi

@ mervasdayi&GerardRechesが提案したことに加えて。あなたが含める必要があることを私がメモしたいと思っただけです

use Illuminate\Support\Facades\Hash;

これらの修正を追加するときは、Userモデルの上部にあります。

2
Grant

@ mervasdayiソリューションに加えて、setPasswordAttributeでパスワードをハッシュして、再ハッシュの問題を回避する良い方法は次のとおりです。

public function setPasswordAttribute($password){
    $this->attributes['password'] = Hash::needsRehash($password) ? Hash::make($password) : $password;
}
2
Gerard Reches

後であると思いますが、この問題を解決するための2つの解決策を見つけました。まず、laravel 5.3を使用すると、bcrypt関数を使用できます。以下の関数を見てください。これは、データを配列で取得することを意味します。

public function create(array $data)
{
    return User::create([
        'password' => bcrypt($data['password']),
    ]);
}

次に、ミューテーターを使用して次のように修正できます。

 public function setPasswordAttribute($password)
{
    $this->attributes['password'] = \Hash::make($password);
}

それが他の人を助けることができることを願っています。宜しくお願いします

0
SANDWIDI