環境
- PHP 8.0.3
- Laravel 8.79.0
今回実現したい事
- ルーティングで
middleware auth:〇〇
を使ってログインしていないユーザはGuard(認証)別のログインページにリダイレクトしたい -
redirectTo
をオーバーライドしただけではGurardが分からないためGuard別のリダイレクトが出来ない
結論
Authenticateクラスのunauthenticated
をオーバーライドしてredirectTo
メソッドの第二引数に$guardsを追加して使う。下記のようにすることでredirectTo
でguardが分かるようになる。
Authenticate.php
use Illuminate\Auth\Middleware\Authenticate as Middleware;
use Illuminate\Auth\AuthenticationException;
class Authenticate extends Middleware
{
protected function unauthenticated($request, array $guards)
{
throw new AuthenticationException(
'Unauthenticated.', $guards, $this->redirectTo($request, $guards) // $guardsを第二引数に追加
);
}
protected function redirectTo($request, $guards) // $guardsを第二引数に追加
{
if (! $request->expectsJson()) {
// middlewareがauth:adminならroute('admin.login.form')にリダイレクトされる
if(in_array('admin', $guards)) {
return route('admin.login.form');
}
// middlewareがauth:userならroute('user.login.form')にリダイレクトされる
if(in_array('user', $guards)) {
return route('user.login.form');
}
}
}
}