Laravel 5.6 で multi-auth の実装

Laravel 5.6 でフロントと管理画面(/admin)で異なるテーブルを用いてユーザー認証(Multi-auth)を行う機能を実装します。

調べてみた結果としては、LoginControllerなどでguardを指定する方法や、Middlewareを追加する例、App/Exceptions/Handler.php を編集する例など。

しかしLaravelのバージョンが古かったり、実装してみるといくつか問題があったり。

・ガード指定している場合、認証ユーザーの情報を取得するときもガードの指定が必要 (Auth::guard(‘front’)->id();など)。

・フロントログイン状態で管理画面にログインすると、フロントのログインが解除される(セッションが衝突する)。逆も然り。

 

ということで以下のように実装。

※今回はフロントはLaravelデフォの認証機能、管理画面は管理画面パッケージ「Voyager」を使用して実装します。また、フロントはfront_users テーブル、管理画面ではusers テーブルを使用することにします。

 

①laravelデフォの認証機能追加

 

②フロント:認証用のモデル作成

FrontUserモデル、マイグレーションファイルの中身をUserモデル、create_users_table.phpからコピー、マイグレーション実行

 

③auth.php、RegisterController編集

・auth.php 編集

・RegisterController 編集

これでフロント側の認証はfront_usersテーブルに切り替わります。

 

④ 管理画面パッケージ「voyager」実装

※voyagerはUserモデルを書き換えます。管理画面でusersテーブルを使用するのはその為です。

 

⑤.env、auth.php、session.php編集

・.env 編集

・auth.php 編集

・session.php 編集(フロントと管理画面でセッション分離)

 

これで管理画面とフロントの認証の分離が終了しました。

自前の管理画面を使用する場合は④を読み替えて実装してみてください。