Laravelはじめたての頃、誰もが遭遇する嫌なメッセージの代表格
「TokenMismatchException in VerifyCsrfToken」
これが発生した時に、TOPページに飛ばすとかそういうことをします。
必要になった経緯
WEB画面上でのメール送信プログラムをつくっていたとして、
送信完了ページで画面をリロードすると、メールが二重で送信される。
だからメール送信後、 $request -> session() -> flush(); みたいなことをすると
二重送信は防げるが、トークン情報が消失するため、TokenMismatchException が出てくる。
なので、トークン情報がない時(送信完了画面でリロード、または送信完了画面に直接アクセス)はTOPページにリダイレクトさせる
実装
app/Exceptions/Handler.php
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Session\TokenMismatchException; // 追加
class Handler extends ExceptionHandler
{
...
public function render($request, Exception $e)
{
if ($e instanceof TokenMismatchException) {
return redirect('/');
}
return parent::render($request, $e);
}
...
}
ポイント
-
use Illuminate\Session\TokenMismatchException;
これがないと動きません -
return parent::render($request, $e);
これよりも上に書くこと