環境
PHP 7.3.4
Laravel 5.5
⇒マルチログインを実装済
前提・実現したいこと
前提・実現したいこと
CSRF対策で、NGになった場合に、セッション切れと同じ動きにしたい。
(通常利用するユーザとしては、セッション切れの際に、CSRFとみなされたように見えてしまうため。)
セッション切れになった場合は、ログイン画面へリダイレクトしています。
マルチログインのため、どちらのログイン画面へ遷移すればよいかを、
AuthenticationException->guards()によって判定しています。
ソース
App\Exception
Handler.php
1class Handler extends ExceptionHandler 2{ 3 : 4 public function render($request, Exception $exception) 5 { 6 // POSTの場合AuthenticationExceptionがthrowされる前に、 7 // TokenMismatchExceptionが発生するため、ここで捕捉する。 8 if ($exception instanceof TokenMismatchException) { 9 // CSRFトークンが一致しなかった際にthrowされるExceptionを判別し、処理を切り分ける。 10 // セッションが紐づかない為、Auth::user()->guard()では、デフォルト(guardA)がとれてしまい、 11 // 必ずguardA_loginへ遷移してしまう。 12 // リクエスト先で必要とされているguardを取得して指定したい。 13 14 return $this->unauthenticated($request, new AuthenticationException('', array(Auth::user()->guard()))); 15 } 16 } 17 18 19 // GETの場合は、$exception->guards()に想定通りの値が入った状態で、ここにくる。 20 public function unauthenticated($request, AuthenticationException $exception) 21 { 22 if (in_array('GuardA', $exception->guards())) { 23 return redirect()->guest(route('guardA_login')); 24 } 25 return redirect()->guest(route('guardB_login')); 26 } 27}
routes\
web.php
1Route::post('/login_A', 'LoginController@login')->name('guardA_login'); 2Route::post('/login_B', 'LoginController@login')->name('guardB_login'); 3 4Route::group(['middleware' => 'auth:GuardA'], function () { 5 // ここの処理で発生したのか? 6 7}); 8 9Route::group(['middleware' => 'auth:GuardB'], function () { 10 // ここの処理で発生したのか? 11});
試したこと
GETの時は、うまくいっているので、Framework側でAuthenticationException throw時の記述を見ればなにかヒントを得られるかと思いましたが、わかりませんでした。
どうかお力添えください。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/31 09:13
2019/06/05 10:42