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

Laravel Sanctum生产环境API认证419错误及Cookie异常问题

Laravel Sanctum生产环境419错误及Cookie缺失问题排查方案

核心配置修正

1. 环境变量(.env)配置调整

生产环境需统一域名相关配置,禁止混用带端口和不带端口的域名:

# 若前端为localhost:3000,按以下统一设置
SESSION_DOMAIN=.localhost  # 前缀的点支持同域名下的端口访问
SANCTUM_STATEFUL_DOMAINS=localhost:3000
APP_URL=http://localhost:8000  # 后端实际访问地址
SESSION_DRIVER=cookie
SESSION_SECURE_COOKIE=false  # 本地测试用false,正式HTTPS环境设true

正式域名场景示例:若前端是example.com:3000,则SESSION_DOMAIN=.example.com,SANCTUM_STATEFUL_DOMAINS=example.com:3000

2. CORS配置(config/cors.php)确保允许凭证

return [
    'paths' => ['api/*', 'sanctum/csrf-cookie'],
    'allowed_methods' => ['*'],
    'allowed_origins' => ['http://localhost:3000'], // 填写前端完整地址
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'],
    'exposed_headers' => [],
    'max_age' => 0,
    'supports_credentials' => true, // 必须设为true,允许携带Cookie
];

3. Sanctum配置(config/sanctum.php)验证状态域

确保状态域读取正确的环境变量:

return [
    'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
        '%s%s',
        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
        env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : ''
    ))),
    // 其余配置保持默认
];

Axios请求配置修正

前端必须开启withCredentials,确保请求携带Cookie:

// Axios全局配置
axios.defaults.withCredentials = true;

// 登录前必须先获取CSRF Cookie(关键步骤)
axios.get('http://localhost:8000/sanctum/csrf-cookie').then(() => {
    // 发起登录请求
    axios.post('http://localhost:8000/api/login', {
        email: 'user@example.com',
        password: 'password'
    });
});

中间件注意事项

不要注释EnsureFrontendRequestsAreStateful中间件,该中间件是Sanctum处理状态请求的核心逻辑。注释后请求正常但无Cookie,本质是域名配置不匹配导致的绕路,并非中间件本身问题。

额外排查点

  • 清除浏览器缓存和Cookie,避免旧配置干扰
  • 重启后端服务,确保.env配置生效
  • 确认前后端协议一致(均为HTTP或均为HTTPS),混合协议会导致Cookie无法携带

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:43:10