Laravel7 マルチログイン環境でセッションタイムアウトを分ける方法

セッションタイムアウトの設定は、/config/session.phpの’lifetime’に単位:分で設定する。
しかし、全ての登場人物がこの値を参照するので、登場人物ごとにlifetimeを用意しないといけない。

なので、管理画面用の’lifetime’を追加する。

/config/session.php

    'lifetime_admin' => env('SESSION_LIFETIME_ADMIN', 120),

実際の値は、envファイルに設定する。

/.env

SESSION_LIFETIME_ADMIN=30

それぞれの値を参照するようにStartSession.phpに手を加える。
/vendor/laravel/framework/src/illuminate/Session/Middleware/StartSession.php

プライベート変数を用意。

    protected $isAdmin;

アクセスされたのが管理画面側なのかを判定してプライベート変数にセットするため、以下を追加。

    protected function handleStatefulRequest(Request $request, $session, Closure $next)
    {
        if ($request->is('admin/*')){  // 追加
            $this->isAdmin = true;    // 追加
        }else{               // 追加
            $this->isAdmin = false;   // 追加
        }                 // 追加

lifetimeの取得先を変更する為、以下のように追加と変更を行う。

    protected function getCookieExpirationDate()
    {
        $config = $this->manager->getSessionConfig();

        if ($this->isAdmin) {              // 追加
            $lifetime = $config['lifetime_admin'];  // 追加
        }else{                      // 追加
            $lifetime = $config['lifetime'];     // 追加
        }                        // 追加

        return $config['expire_on_close'] ? 0 : Date::instance(
//            Carbon::now()->addRealMinutes($config['lifetime'])
//             ↓変更
            Carbon::now()->addRealMinutes($lifetime)
        );
    }

もっと美しくて良い方法を教えて欲しい。。。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です