Laravel 10+jQuery AJAX下CSRF Token不匹配问题求助
解决Laravel 10 + jQuery AJAX CSRF Token不匹配问题
1. 验证Token的实际取值一致性
- 打开浏览器控制台执行
console.log($('meta[name="csrf-token"]').attr('content')),把输出值和后端执行session()->token()得到的结果对比。如果不一致,检查app.blade.php里的meta标签是否正确渲染:<meta name="csrf-token" content="{{ csrf_token() }}"> - 确认bootstrap.js的全局AJAX配置生效,修改后必须执行
npm run dev或npm run build重新编译前端资源:$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
2. 排查请求缓存与重定向问题
- 打开浏览器Network面板,查看请求是否存在301/302重定向。重定向后的新请求可能会丢失或替换原Token,导致匹配失败。
- 在AJAX请求中添加
cache: false参数,避免浏览器缓存旧请求:$.ajax({ url: '/your-target-endpoint', method: 'POST', cache: false, // 其他请求参数 });
3. 检查Session与Cookie配置
- 确认.env文件中
SESSION_DOMAIN与当前域名一致,本地开发可留空或设为localhost;线上环境需匹配实际域名。 - 检查
SESSION_SECURE_COOKIE:本地HTTP开发时设为false,线上HTTPS环境设为true,否则Cookie无法正常携带,导致Session内的Token与请求Token不匹配。
4. 避免重复携带Token引发冲突
你当前同时在data中携带_token参数、在headers中设置X-CSRF-TOKEN,两种方式二选一即可。建议保留全局的X-CSRF-TOKEN头,删除data里的_token参数,避免后端解析异常。
5. 核对路由与中间件配置
- 确保请求对应的路由在
web中间件组内,web组默认包含VerifyCsrfToken中间件;若误将路由放在api组,反而会因CSRF验证逻辑不同导致报错。 - 若需临时跳过特定路由的CSRF验证,可在
app/Http/Middleware/VerifyCsrfToken.php的$except数组中添加该路由,但不建议全局跳过验证。
内容的提问来源于stack exchange,提问作者Gireesh Doddipalli
相关产品推荐
相关产品推荐

