目次

【Laravel 7】マルチ認証のセッションを分ける

マルチ認証を単に実装しただけでは、同じクッキーやセッションが使用されるため、同一ブラウザのタブ内で両方のログイン後の画面などを表示した際に、検索ワードなどが共有されてしまい困ることがある。
これを防ぐために、ログイン中の画面に応じてセッション名を変更し、別々に管理できるようにします。

.env でクッキーの名前を設定

.env

// 以下2つを追加
SESSION_COOKIE=user
SESSION_COOKIE_ADMIN=admin

config に管理画面用のクッキー設定を追加

config\session.php

    'cookie' => env(
        'SESSION_COOKIE',
        Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
    ),

    // 追加(管理画面用)
    'cookie_admin' => env(
        'SESSION_COOKIE_ADMIN',
        Str::slug(env('APP_NAME', 'laravel'), '_').'_session_admin'
    ),

管理画面アクセスならクッキーの変更

app\Providers\AppServiceProvider.php

    public function boot()
    {
        // 管理画面用のクッキー
        if (request()->is('admin*')) {
            config(['session.cookie' => config('session.cookie_admin')]);
        }
    }

これで設定完了です。
あとは、同一ブラウザ内の別タブで、それぞれの認証にログインすると2つのクッキーが作られ、別々に管理されているのが確認できるかと思います。

参考:Laravelマルチ認証でセッション用テーブル、設定を分ける(Laravel6で確認済み)