2017-08-04 12 views
0

私はLaravel 5.4プロジェクトに取り組んでいます。 Laravelが提供するログインが大好きで、ログインや登録の両方でうまく動作します。Laravel 5.4ログインフォームにアクティブ化保留中のメッセージを表示

以下のコードをAuth/LoginController.phpに追加します。それはアクティブになっているユーザ(ステータス= 1)のみがログインできますが、保留中のユーザやブロックされたユーザ(ステータス= 0など)は許可されません。

protected function credentials(\Illuminate\Http\Request $request) 
{ 
    return ['email' => $request->{$this->username()}, 'password' => $request->password, 'status' => 1]; 
} 

とにかく、スパムを守るために、有効になっているユーザーだけがログインできるようにしたいと考えています。アカウントが有効化されていない場合は、ログインフォームに保留中のメッセージを表示したいと思います。また、ブロックされたユーザーに対しても同じことをしたいと思います。

これを達成する方法を教えてください。

答えて

0

このようにして、Laravelはユーザーが指定した資格情報でしかユーザーを選択しません。ユーザーが持っている状態を確認したい場合、表示するビューはログインコントローラのauthenticated()メソッドを上書きできます。すでにログインしているユーザーにアクセスできるので、ログアウトする必要があることに注意してください。ステータスが無効です。

protected function authenticated(Request $request, $user) 
{ 
    if ($user->status == 0) { 
     auth()->logout(); 

     return back()->withErrors(['email' => 'You are blocked or not activated.']); 
    } 

    return redirect()->intended($this->redirectPath()); 
} 
+0

ありがとうございます。ログインコントローラでこのコードを正しく配置する必要があります。これを追加すると、エラーが出ます。App \ Http \ Controllers \ Auth \ LoginController :: authenticated()に渡された引数1は、App \ Http \ Controllers \ Auth \ Requestのインスタンス、Illuminate \ Http \ Requestのインスタンスでなければなりません。 ... – Udom

+0

@あなたはコントローラにクラスをインポートする必要があります。名前空間宣言の後にファイルの先頭に 'Use Illuminate \ Http \ Request;'を追加してください。 – TheFallen

+0

それは素晴らしい作品です!とにかく、電子メールがまだ登録されていないというメッセージを伝える方法を教えてもらえますか? – Udom

関連する問題