13
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-09-10

Laravelのマルチ認証で、デフォルトのユーザ認証と管理画面用認証を実装したとします。
マルチ認証自体の実装については他の方がたくさん書いております。

セッションに関する設定、例えば

  • セッションIDを保存するときのクッキー名称
  • セッションを保存するテーブル名称
  • セッションのlifetime

などは
config/session.php
にまとめて記載されており、1つしか設定をかけません。

管理画面のセッション有効期限は変えたい、セッションテーブルは分けたい・・
などの要件もあると思います。

ここではデフォルトのユーザ認証と追加で実装した管理画面用認証が別々のセッションテーブルを利用するようにしてみます。

環境

Laravel6.0.0
MySQL5.7
XAMPP7.2.17

方針

管理用のURLパターン
/admin~
の場合だけ、セッションの設定を上書きして実行する

手順

上書きするConfig設定内容

  1. session.cookie (セッションIDを保管するクッキー名称)
  2. session.table (セッション情報が格納されるテーブル名称)

.envへ設定値の追加

環境毎に設定するもなので、まずは.envファイルに設定したい値を定義していきます。

.env
SESSION_COOKIE_ADMIN=auth-admin
SESSION_TABLE_ADMIN=sessions_admin

configファイルへの追記

configディレクトリに何でもよいので自分の設定用としてphpファイルを作成します。
config/const.php

config/const.php
return[
    // 管理画面用のクッキー名称、セッションテーブル名
    'session_cookie_admin' => env('SESSION_COOKIE_ADMIN', Str::slug(env('APP_NAME', 'laravel'), '_').'_session'),
    'ssession_table_admin' => env('SESSION_TABLE_ADMIN'),
]

設定ファイルをキャッシュ

私の場合、設定ファイルを変更した場合は必ずキャッシュしているので今回もキャッシュしておきます。
php artisan config:cache

これで設定値の定義自体は完了しました。次は具体的にどのように設定を上書きしていくかです。

設定を上書きする

修正対象ファイルは
app\Providers\AppServiceProvider.php

boot()メソッドに以下を追記する

app\Providers\AppServiceProvider.php
    public function boot()
    {
        // 管理画面用のクッキー名称、セッションテーブル名を変更する
        $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
        if (strpos($uri, '/admin/') === 0 || $uri === '/admin') {
            config([
                'session.cookie' => config('const.session_cookie_admin'),
                'session.table' => config('const.ssession_table_admin'),
            ]);
        }
    }

これで/admin以下へのアクセス時にセッションを利用する場合には上書きした設定値が採用されるはずです。

ポイント

  • session.phpについて
    • config/session.phpの中にif文を書ければ早いが・・。config:cacheで設定をキャッシュするとこのif文は実行されない。
    • (厳密にいうとconfig:chaceを実行した瞬間だけ実行される。意味なし)
    • なので、この設定ファイルに書くのは得策ではなさそう。
  • 上書きを実行する場所について
    • コントローラ側での上書きでは順番的に遅いのでapp\Providers\AppServiceProvider.phpで始めに上書きしました。
    • 設定値の読み出しにはenv関数ではなく、config関数を使います。設定をキャッシュしている場合、env関数はnullを返すからです。

参考

13
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?