ECサイトなど会員登録機能を備えたサイトは大きくなると利便性やマーケティング的な観点からページ遷移にとても気を使うようになります。ログイン後のリダイレクト先も重視される導線の一つですね。先の案件でそれらを見直す機会があったので挙動や設定方法について備忘録を兼ねてまとめます。

事前準備

以降の解説はLaravel Breezeがインストールされている状態から進めます。一緒に手を動かしながら進める方は過去の記事、Laravel 8.xのインストールを参考にインストールして下さい。

途中、debugbarでsessionの状態を確認します。必要であればそちらもインストールを、

composer require barryvdh/laravel-debugbar --dev

ログインボタンからログインした際のリダイレクト先

まずは通常のログイン遷移を確認してみましょう。
新規のプロジェクトにLaravel Breezeをインストールした状態だと、トップページ右上のLog inからログインからログインできますね。

そして、ログイン後はdashboardページへ遷移しました。

これを任意のURL、例えば、トップページ(’/’)に変更したい場合はどうすれば良いでしょうか?

ログイン時に実行されているのはAuthenticatedSessionControllerstore()ですので、そちらを確認してみましょう。

/**
 * Handle an incoming authentication request.
 *
 * @param  \App\Http\Requests\Auth\LoginRequest  $request
 * @return \Illuminate\Http\RedirectResponse
 */
public function store(LoginRequest $request)
{
    $request->authenticate();

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

    return redirect()->intended(RouteServiceProvider::HOME);
}

リダイレクト先は、redirect()->intended(RouteServiceProvider::HOME);によって決まっているようです。
こちらのメソッドの詳しい解析は後に回して、引数のRouteserviceProvider::HOMEという定数に注目です。

RouteServiceProviderを確認するとHOMEは現在のリダイレクト先である’/dashboard’となっていました。
この値をトップページ(’/’)に変更してみましょう。

class RouteServiceProvider extends ServiceProvider
{
    /**
     * The path to the "home" route for your application.
     *
     * This is used by Laravel authentication to redirect users after login.
     *
     * @var string
     */
    public const HOME = '/';    // '/dashboard' から変更
...

一旦ログアウトしてから再ログインすると、今度はトップページ(’/’)にリダイレクトされましたね。
続きます。

By hikaru