Laravel ログインタイムアウト後のPOSTで419 Page Expiredの対処方法

419 Page Expiredは、@csrfの記述忘れということが多いが
ログインタイムアウト後にPOSTした時にも発生する。

認証機能のページの作り方にもよると思うが
私の認証機能の作り方では
ログインタイムアウト後のGETではログインページに遷移されるが
POSTの場合は、PageExpiredエラーが発生する。

GETでは正しい動作をしてくれるので気づきにくい。
更に、ログインタイムアウトした状態でPOSTということは
入力や編集のページに行ってタイムアウトになるまで放置して
その後にPOSTしなければ発生しないという状況で原因を追求するのに時間がかかった。

■ログインタイムアウト後のPOSTでログインページに遷移させる方法

app\Exceptions\Handler.phpに以下を追記

namespace App\Exceptions;

use Illuminate\Session\TokenMismatchException;					// 追加
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;

  ・
  ・
  ・

    public function render($request, Throwable $exception)
    {

        if ($exception instanceof TokenMismatchException) {		// 追加
            return redirect('/login');							// 追加
        }														// 追加

        return parent::render($request, $exception);
    }

認証機能を持ったサイトを作るたびにこの作業をやっているので
認証機能作成手順にこの作業も含んだほうがいいかもと思った。

1件のコメント

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です