Laravelでmulti-auth

どうもこんにちは

毎度のごとく、Laravelの話題です。
Laravelで、フロント機能と管理機能を作って、別々の認証機構を持ちたいときありますよね。

例えば、フロントはLaravelの認証機能(php artisan make:authで作るアレ)で、
管理画面はLaravel-adminで、とすると、同一セッションの奪い合いになるようで。
私のところでは、Laravel-adminでログインしたまま、フロント側のログインを行うと419が出ました。
VerifyCsrfTokenからthrowされる、TokenMismatchExceptionです。はい。

これを回避するために、設定を加えます。

なお、バージョンは
Laravel 5.8
encore/laravel-admin 1.6.10
です。

↓↓↓今回の記事は、こちらを参考にさせていただきました。↓↓↓
Laravel 5.6 で multi-auth の実装 | CORGI, Inc.


前提

一応、ですが。
Laravel本体とlaravel-adminはcomposer経由でインストール済み。

そのあと、フロント側の認証機能を作成
php artisan make:auth

および、laravel-adminのドキュメントにしたがって、
php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"

php artisan admin:install

は済ませておきます。
ここ以降、ほぼインストールした直後の状態で話を進めます。
もし、必要であれば適宜読み替えてください。


セッションを分離する

いきなり本題です。
URLによって、セッションIDを持たせるキーを変えます。

■.env
下記を追記します。

 

■config/session.php
まず、初期状態では配列をreturnしているだけなので、返却する変数に収めます。
で、管理画面のURL(変更していなければ、管理画面のURLはadminから始まる)からのアクセスであれば
cookieのキーを変更します。

 

■おまじない
php artisan config:cache

これでほぼおしまいです。


ログアウト処理

デフォルトのままのログアウト処理は、フロント側、管理画面(laravel-admin)側ともに
$request->session()->invalidate();
があります。
これをすると、セッションを全部消してしまうので、
$request->session()->invalidate();を抜いた処理にして、ログアウト処理をオーバーライドします。
※セッション消去上等!の場合は下は不要です。

■フロント側(app\Http\Controllers\Auth\LoginController.php)

 

■管理画面側(app\Admin\Controllers\AuthController.php)

 

これでうまいこといきました。

r.tanakaがお届けしました。

コメントを残す

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