You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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令牌,加到外部表单里:

  1. 在Laravel中添加获取令牌的路由
    在routes/web.php里新增一条路由:
Route::get('/get-csrf-token', function () {
    return response()->json(['token' => csrf_token()]);
});
  1. 修改外部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>
  1. 处理跨域问题(如果需要)
    如果浏览器报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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:23:59