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

Heroku部署NuxtJS+Laravel Sanctum项目登录后重定向失效且CSRF Token为null

问题排查及解决方案

1. 修正CORS配置合规性

你当前cors.php配置存在两处明显问题:

  • 多余的"Accept"=>"application/json"配置项不属于CORS配置规范,直接删除即可,避免配置解析异常
  • 按照W3C标准,当supports_credentials设为true时,allowed_origins不能使用通配符*,必须指定前端的完整域名,示例如下:
'allowed_origins' => ['https://你的Nuxt前端部署域名.herokuapp.com'],

2. 补全Sanctum状态域配置

Sanctum的stateful配置需要包含前端Nuxt应用的域名,你当前默认配置仅自动添加了后端API的域名,缺少前端域名:

  • 直接在Heroku的后端环境变量中新增SANCTUM_STATEFUL_DOMAINS,值为你的Nuxt前端域名.herokuapp.com,你的后端API域名.herokuapp.com,注意不要带http/https前缀和端口
  • 无需修改sanctum.php的代码,环境变量会覆盖默认拼接的规则

3. 补全Nuxt Auth模块配置

你当前的nuxt.config.js中缺少跨域请求带凭证的配置,导致浏览器不会保存后端返回的Cookie:
在laravelSanctum策略下新增credentials: true配置,示例如下:

auth: {
    strategies: {
      laravelSanctum: {
        provider: 'laravel/sanctum',
        url: 'https://***-api.herokuapp.com',
        credentials: true, // 新增这一行
        // 其余原有配置保持不变
      }
    }
}

4. 校验会话相关环境变量

检查Heroku后端的环境变量配置:

  • SESSION_DRIVER推荐设为cookie
  • SESSION_DOMAIN不要设置为.herokuapp.com(herokuapp.com属于公共后缀,浏览器会拒绝该级别的Cookie写入),留空或者填写后端API的完整域名即可
  • 确保APP_URL填写的是后端API的完整访问地址

5. 修复VerifyCsrfToken配置

你提到VerifyCsrfToken.php内容为空,建议恢复默认配置,仅在$except属性中添加需要排除CSRF校验的路径即可:

protected $except = [
    'sanctum/csrf-cookie',
    // 其他需要排除的路径
];

6. 确认登录流程正确性

确保Nuxt端的登录逻辑严格遵循Sanctum的要求:先发送GET请求到/sanctum/csrf-cookie接口,拿到CSRF Cookie后再发起登录请求,否则后端不会返回CSRF Cookie。


内容的提问来源于stack exchange,提问作者Arthur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:36:04