Laravel 8.X 学习记录之 `CSRF token mismatch`

3,050 阅读1分钟

发送 ajax 请求时出现 CSRF token mismatch. 是因为没有带上 token 信息。

解决方法一:取消 token 验证,找到文件 app\Http\Kernel.php 中的 $middlewareGroups,将 \Illuminate\Session\Middleware\AuthenticateSession::class,\App\Http\Middleware\VerifyCsrfToken::class, 注释掉即可。

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            // \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];

解决方法二:增加 token 验证,先在页面头部添加 <meta name="csrf-token" content="{{ csrf_token() }}">,然后再 ajax 请求中添加

    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });

再次请求即可。
详情可查看文档 https://laravel.com/docs/8.x/csrf