Laravel跨域表单提交遇419过期错误,CSRF排除配置无效求助
解决Laravel接收外部表单提交的419 Page Expired错误
你遇到的问题核心是对VerifyCsrfToken中间件的$except数组理解错了——这个数组要排除的是Laravel项目接收请求的路由地址,而不是发起请求的外部页面地址。下面给你两种解决方案,按需选择:
方案一:正确配置CSRF排除规则(快速但安全性稍低)
首先找到你的外部表单提交的目标Laravel路由,比如你的表单action属性是http://localhost/demo/public/attendance/save,那你需要把这个Laravel端的请求路径加到$except数组里,而不是外部页面的http://localhost/attendance。
修改VerifyCsrfToken类的代码:
class VerifyCsrfToken extends Middleware { /** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ // 可以填相对路径(推荐) '/attendance/save', // 或者完整的请求URL也支持 // 'http://localhost/demo/public/attendance/save' ]; }
保存后执行php artisan config:clear清空Laravel配置缓存,再测试提交即可。
方案二:在外部表单中加入CSRF令牌(更安全,推荐)
如果不想关闭目标路由的CSRF验证,你可以从Laravel获取合法的CSRF令牌,加到外部表单里:
- 在Laravel中添加获取令牌的路由
在routes/web.php里新增一条路由:
Route::get('/get-csrf-token', function () { return response()->json(['token' => csrf_token()]); });
- 修改外部HTML表单
在你的http://localhost/attendance页面里,通过AJAX获取令牌并插入表单的隐藏字段:
<form action="http://localhost/demo/public/attendance/save" method="POST"> <!-- 你的表单输入字段 --> <input type="hidden" name="_token" id="csrf-token"> <button type="submit">提交数据</button> </form> <script> // 从Laravel获取CSRF令牌 fetch('http://localhost/demo/public/get-csrf-token') .then(res => res.json()) .then(data => { document.getElementById('csrf-token').value = data.token; }); </script>
- 处理跨域问题(如果需要)
如果浏览器报CORS相关错误,你需要在Laravel中配置跨域允许:
- 可以安装
barryvdh/laravel-cors包,按照文档配置允许http://localhost的请求; - 或者临时在
app/Http/Middleware里新建一个CORS中间件,添加响应头:
public function handle($request, Closure $next) { return $next($request) ->header('Access-Control-Allow-Origin', 'http://localhost') ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS') ->header('Access-Control-Allow-Headers', 'Content-Type, Authorization'); }
然后把这个中间件加到app/Http/Kernel.php的$middleware数组里。
额外检查点
- 确认你的表单使用的是
POST方法(GET请求不会触发CSRF验证,但提交数据建议用POST); - 确认Laravel的Session配置正常(CSRF令牌依赖Session,Session异常也会导致419错误);
- 执行
php artisan cache:clear清空应用缓存,确保所有配置生效。
内容的提问来源于stack exchange,提问作者softya
相关产品推荐
相关产品推荐

