質問: Laravel 6を使っています。 デフォルトのAuth機能で Users(ログインユーザ用のテーブル) に特定のカラム(Invalid)を追加し、これがtrueの時に「存在しないユーザのような挙動」または「無効である」 旨をログイン画面に表示させたいです。良い方法ありますか?
回答: いくつか方法が考えられます。 もし「無効なユーザが認証の必要なページにアクセスしたら403を表示する」といったような単純な挙動でニーズを満たすならば、ミドルウェアを利用するのが手軽そうです。 例えば以下のようなミドルウェアを作って各ルートに登録しておけば、invalid=trueのユーザはそれらのルートにはアクセスできず、かわりに403ページが表示されます。 ``` namespace App\Http\Middleware; use Closure; class IsUserValid { public function handle($request, Closure $next, $role) { if ($request->user()->invalid) { abort(403, 'エラーメッセージ'); } return $next($request); } } ``` もしログインページのバリデーションメッセージとしてユーザが無効である旨を表示する必要があるようでしたら、カスタムのバリデーションルールを作るのが良いかと思います。 あるいは、試していないのですが既存のexistsルールを使っても、チェックする際のeloquentクエリをカスタマイズできるようなので同等のことができそうです。 余談ですが、仮にログイン時のバリデーションを実装するとしても、ミドルウェアは登録しておいた方が良さそうですね。ユーザが既にログインしている状態で、user.invalid=falseに変わっても、ミドルウェアがなければ引き続きアクセスできてしまうため。