Laravelでのマルチ認証実装時のRedirectIfAuthenticated

概要

Laravel5.8でuserとadminを分けるマルチ認証を実装しました。
その際、adminで認証済みのユーザがログインページに遷移した時に、認証済みであるにも関わらず、ログインページが表示されていました。
本来、認証済みであるならばログインページに遷移せず、ログイン後のページに遷移するのが正しいです。

この処理はapp/Http/Middleware/RedirectIfAuthenticated.phpに記載されていますが、調査すると引数の$guestがnullであることがわかりました。
nullだとconfig/auth.phpで定義されたdefaultsのguardをチェックするので、正しいチェックになりません。

解決

ログインページはroute定義でmiddlewareにguestを定義していますが、その際、パラメータでadminを渡していなかったことが原因でした。
以下のようにして解決。

1
2
3
4
Route::group(['prefix' => 'admin', 'middleware' => 'guest:admin'], function () {
Route::get('login', 'Admin\AdminLoginController@showLoginForm')->name('admin.login');
Route::post('login', 'Admin\AdminLoginController@login');
});
PHPカテゴリの記事