

Laravel 6を使っています。

デフォルトのAuth機能で Users（ログインユーザ用のテーブル）
に特定のカラム（Invalid）を追加し、これがtrueの時に「存在しないユーザのような挙動」または「無効である」
旨をログイン画面に表示させたいです。良い方法ありますか？


CC BY-SA 4.0
2021-05-13T16:31:13.333
75823
2021-07-18T12:19:30.260
2021-07-18T12:19:30.260
45215
45215
question
laravel
Auth機能でユーザが無効の時にログインを制限したい


いくつか方法が考えられます。

もし「無効なユーザが認証の必要なページにアクセスしたら403を表示する」といったような単純な挙動でニーズを満たすならば、[ミドルウェア](https://readouble.com/laravel/6.x/ja/middleware.html)を利用するのが手軽そうです。

例えば以下のようなミドルウェアを作って各ルートに登録しておけば、invalid=trueのユーザはそれらのルートにはアクセスできず、かわりに403ページが表示されます。

[code]

    namespace App\Http\Middleware;
    
    use Closure;
    
    class IsUserValid
    {
        public function handle($request, Closure $next, $role)
        {
            if ($request->user()->invalid) {
                abort(403, 'エラーメッセージ');
            }
    
            return $next($request);
        }
    }
    
[/code]

もしログインページのバリデーションメッセージとしてユーザが無効である旨を表示する必要があるようでしたら、[カスタムのバリデーションルールを作る](https://readouble.com/laravel/6.x/ja/validation.html#custom-
validation-rules)のが良いかと思います。

あるいは、試していないのですが[既存のexistsルール](https://readouble.com/laravel/6.x/ja/validation.html#rule-
exists)を使っても、チェックする際のeloquentクエリをカスタマイズできるようなので同等のことができそうです。

余談ですが、仮にログイン時のバリデーションを実装するとしても、ミドルウェアは登録しておいた方が良さそうですね。ユーザが既にログインしている状態で、user.invalid=falseに変わっても、ミドルウェアがなければ引き続きアクセスできてしまうため。


CC BY-SA 4.0
2021-05-30T05:39:59.580
76193
2021-05-30T05:39:59.580
784
75823
answer