環境
- Laravel5.5
- multi auth
やりたいこと
Multi auth を使っている前提で、未認証時にユーザ・管理者それぞれのログインページにリダイレクトさせたい。
5.4 までは app/Exceptions/Handler.php に直書きされていた
5.4 では、app/Exceptions/Handler.php に unauthenticated メソッドがありました。
namespace App\Exceptions;
use Exception;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
.
.
.
/**
* Convert an authentication exception into an unauthenticated response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $exception
* @return \Illuminate\Http\Response
*/
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
return redirect()->guest(route('login'));
}
}
これが、5.5 では初期状態では書かれていません。
vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php
こちらにあるようです。
どっちにしても、 app/Exceptions/Handler.php 内で unauthenticated をオーバーライドします。
namespace App\Exceptions;
use Exception;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
.
.
.
/**
* 認証していない場合にガードを見てそれぞれのログインページへ飛ばず
*
* @param \Illuminate\Http\Request $request
* @param AuthenticationException $exception
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|\Illuminate\Http\Response
*/
public function unauthenticated($request, AuthenticationException $exception)
{
if($request->expectsJson()){
return response()->json(['message' => $exception->getMessage()], 401);
}
if (in_array('admin', $exception->guards())) {
return redirect()->guest(route('admin.login'));
}
return redirect()->guest(route('user.login'));
}
}
参考
▼Laravel 5.5 change unauthenticated login redirect url
https://stackoverflow.com/questions/45340855/laravel-5-5-change-unauthenticated-login-redirect-url
▼[Laravel] 5.3でMulti-Authを使う
http://www.84kure.com/blog/2016/06/06/laravel-5-3%E3%81%A7multi-auth%E3%82%92%E4%BD%BF%E3%81%86/