发送 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