laravel5.5のwebフォームで2時間以上放置すると、xsrfトークンの有効期限が切れてエラー画面になる。エラー表示させずに、元の画面にリダイレクトする。
The page has expired due to inactivity.
Please refresh and try again
と表示されても、ユーザにはよく分からないので、元の画面に戻す
back()->withInput()で値は保持しておく。ユーザ認証もあったら2時間経っているのでセッションタイムアウトで、ログイン画面に戻るはず。
redirectなので、xsrfトークンが再発行され、送信ボタンを押せば問題なく送信されるはず
app/Exceptions/Handler.phpで、処理を記述
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
public function render($request, Exception $exception) { // どの例外クラスが発生したかによって処理を分けられる。 if($exception instanceof CustomException) { return '独自例外エラー発生!'; } $class = get_class($exception); switch($class) { // 認証エラーの場合、どの認証に失敗したかによって、ログインURLを振り分ける case 'Illuminate\Auth\AuthenticationException': $guard = array_get($exception->guards(), 0); switch ($guard) { case 'user': $login = 'section/login'; break; case 'admin': $login = 'admin/login'; break; default: $login = 'login'; break; } return redirect($login); // formで2時間以上放置するとxsrfトークンの有効期限が切れてエラー画面になる // The page has expired due to inactivity.Please refresh and try againと表示させずに、元の画面にリダイレクトする。 // redirectなので、xsrfトークンが再発行され、送信ボタンを押せば問題なく送信されるはず case 'Illuminate\Session\TokenMismatchException': return back()->withInput(); } // それ以外のエラーは、そのまま画面に表示 return parent::render($request, $exception); } |