Ccmmutty logo
Commutty IT
0 pv4 min read

【Laravel】ログイン認証をカスタマイズする時に編集するファイルたち

https://cdn.magicode.io/media/notebox/laravel02_authenticate.png
※Laravel UIをインストールしている前提です

ログイン・ログアウト処理

対象ファイル:app\Http\Controllers\Auth\LoginController.php
初期状態ではリダイレクト先とコンストラクタのみが定義されていますが、「AuthenticatesUsers」トレイトのメソッドをオーバーライドすることが可能です。
よく使いそうなメソッドを紹介します。

ログイン画面を表示する前の処理

対象メソッド:showLoginForm()
public function showLoginForm()
    {
        return view('auth.login');
    }
デフォルトではログイン画面を表示するだけの処理が書かれています。ビューで使いたい変数を渡したい時はここに追加します。

ログインボタンを押下した時の処理

対象メソッド:login()
public function login(Request $request)
    {
        // 入力フォームのバリデーション
        $this->validateLogin($request);

        // 一定回数認証失敗しているとロック
        if (method_exists($this, 'hasTooManyLoginAttempts') &&
            $this->hasTooManyLoginAttempts($request)) {
            $this->fireLockoutEvent($request);

            return $this->sendLockoutResponse($request);
        }

        // 認証成功した時
        if ($this->attemptLogin($request)) {
            if ($request->hasSession()) {
                $request->session()->put('auth.password_confirmed_at', time());
            }

            return $this->sendLoginResponse($request);
        }

        // 認証失敗した時
        $this->incrementLoginAttempts($request);

        return $this->sendFailedLoginResponse($request);
    }
一連のログイン処理がまとまっています。独自の処理を追加したい時はここでサービス等を呼び出します。

ログイン認証の条件

対象メソッド:credentials()
protected function credentials(Request $request)
    {
        return $request->only($this->username(), 'password');
    }
credentialsの戻り値は配列形式で、キーが認証テーブルのカラム名と一致するようにします。

認証後の処理

対象メソッド:authenticated()
protected function authenticated(Request $request, $user)
    {
        //
    }
ログイン処理で認証成功後に実行されます。ログイン後に画面遷移する前に初期設定が必要な場合などは、ここで定義することができます。

ログアウトボタンを押下した時の処理

対象メソッド:logout()
public function logout(Request $request)
    {
        $this->guard()->logout();

        $request->session()->invalidate();

        $request->session()->regenerateToken();

        if ($response = $this->loggedOut($request)) {
            return $response;
        }

        return $request->wantsJson()
            ? new JsonResponse([], 204)
            : redirect('/');
    }
最後のredirect('/')でログアウト後に遷移する画面のURLを指定します。ルート以外の画面に遷移させたい時はここを編集します。

画面アクセス時の処理(ミドルウェア)

認証の必要な画面にアクセスした時の処理

対象ファイル:app\Http\Middleware\Authenticate.php
protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('login');
        }
    }
ルーティングでmiddleware('auth')を指定した画面にアクセスした時に実行される処理です。
redirectTo()では未認証のユーザーが該当画面にアクセスした際、強制的にログイン画面に遷移させるようになっています。ログイン画面以外の画面を指定することも可能です。

認証済みのユーザーがアクセスした時の処理

対象ファイル:app\Http\Middleware\RedirectIfAuthenticated.php
public function handle(Request $request, Closure $next, ...$guards)
    {
        $guards = empty($guards) ? [null] : $guards;

        foreach ($guards as $guard) {
            if (Auth::guard($guard)->check()) {
                return redirect(RouteServiceProvider::HOME);
            }
        }

        return $next($request);
    }
ルーティングでmiddleware('guest')を指定した画面にアクセスした時に実行される処理です。
認証済みのユーザーがログイン画面等にアクセスした際、強制的にホーム画面に遷移させるようになっています。こちらも任意の画面を指定可能です。
※遷移先が固定であれば、定数HOMEを直接編集したほうが良いですが、条件によって遷移先を変えたい場合はここに処理を記載します。

Discussion

コメントにはログインが必要です。