16
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravelでトークンミスマッチが起きた時にリダイレクトさせる

Posted at

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); これよりも上に書くこと
16
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?