Laravel Backpack删除条目时出现419 CSRF token mismatch错误如何解决
问题引发原因
- Laravel框架默认要求所有POST、PUT、DELETE类型的请求必须携带正确的CSRF令牌完成身份校验,Backpack的删除操作调用的是DELETE类型接口,返回419
CSRF token mismatch错误,本质就是该删除请求没有携带服务端认可的有效CSRF令牌。 - 常见触发场景:
- 后台页面的CSRF元标签缺失:Laravel默认模板会在页面头部插入csrf元标签供前端JS读取,如果你自定义了后台布局模板漏加了该标签,Backpack的前端脚本就无法获取到正确的令牌。
- 令牌过期:页面长时间停留未操作,服务端session过期导致原令牌失效,这种情况刷新页面即可恢复正常,如果每次点击删除都报错则不属于该场景。
- Session配置错误:如果修改过session域名、HTTPS校验、驱动等相关配置,配置和当前站点环境不匹配也会导致令牌校验失败。
修复方案
- 补充CSRF元标签
打开你的后台布局Blade文件(默认路径为resources/views/vendor/backpack/base/inc/head.blade.php),确认页面头部已经添加以下代码,没有的话手动补充即可:
<meta name="csrf-token" content="{{ csrf_token() }}">
这是Backpack前端脚本获取CSRF令牌的默认来源。
- 手动配置AJAX全局请求头
如果你自定义过全局JS逻辑覆盖了Backpack的默认配置,可以在公共JS文件中添加以下代码,手动给所有AJAX请求加上CSRF令牌:
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
如果你的项目用Axios发请求,对应配置如下:
axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]').content;
- 排除指定路由的CSRF校验(不推荐生产环境使用)
如果仅删除路由需要临时关闭CSRF校验,可以打开app/Http/Middleware/VerifyCsrfToken.php文件,在$except属性中添加对应的删除路由:
protected $except = [ 'admin/tag/*/delete', // 其他需要排除CSRF校验的路由 ];
- 排查Session配置
检查项目根目录的.env文件中Session相关配置是否和当前站点环境匹配:
- 如果站点是HTTPS协议,需要将
SESSION_SECURE_COOKIE设置为true - 本地HTTP开发环境需要将
SESSION_SECURE_COOKIE设置为false SESSION_DOMAIN需要配置为你站点的实际域名,本地开发可以留空
内容的提问来源于stack exchange,提问作者Mireczko
相关产品推荐
相关产品推荐

