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

Laravel Sanctum+NextJs部署后出现CSRF Token Mismatch问题求助

Laravel Sanctum + Next.js 部署后「CSRF Token Mismatched」问题解决

问题情况

本地环境和Postman里所有功能正常,但部署到服务器后,Next.js(部署在admin.example.com子域名)登录时触发「CSRF Token Mismatched」错误,已在sanctum.php做了如下配置:

'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
        '%s%s%s',
        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,localhost:8000::1,example.com, admin.example.ae',
        env('APP_URL') ? ',' . parse_url(env('APP_URL'), PHP_URL_HOST) : '',
        env('FRONTEND_URL') ? ',' . parse_url(env('FRONTEND_URL'), PHP_URL_HOST) : ''
    ))),

修复步骤

1. 修正Sanctum配置的格式错误

你的配置里有两个明显问题:

  • admin.example.ae前面多了空格,会导致域名识别失败
  • localhost:8000::1格式错误,应该拆成localhost:8000,::1

建议直接在.env里明确设置SANCTUM_STATEFUL_DOMAINS,避免拼接出错:

SANCTUM_STATEFUL_DOMAINS=localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1,example.com,admin.example.com

然后sanctum.php可以简化成:

'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', '')),

2. 配置Session共享域名

打开config/session.php,把domain设置为根域名(前面加.),让所有子域名能共享Cookie:

'domain' => '.example.com',

同时在.env里同步设置:

SESSION_DOMAIN=.example.com

3. 前端请求必须带Credentials和CSRF头

Next.js里要先请求/sanctum/csrf-cookie接口拿令牌,再发登录请求,并且确保请求开启credentials: 'include':

// 先获取CSRF Cookie
await fetch('https://api.example.com/sanctum/csrf-cookie', {
  method: 'GET',
  credentials: 'include'
});

// 登录请求
const xsrfToken = document.cookie.split('; ').find(row => row.startsWith('XSRF-TOKEN='))?.split('=')[1];
const response = await fetch('https://api.example.com/login', {
  method: 'POST',
  credentials: 'include',
  headers: {
    'Content-Type': 'application/json',
    'X-XSRF-TOKEN': decodeURIComponent(xsrfToken)
  },
  body: JSON.stringify({
    email: 'your-email@example.com',
    password: 'your-password'
  })
});

4. 清除服务器缓存

部署完配置后必须清缓存,不然Laravel会用旧配置:

php artisan config:clear
php artisan cache:clear

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:10:24