必须将'sanctum/csrf-cookie'显式添加到CORS的paths配置中,否则浏览器无法接收XSRF-TOKEN Cookie,导致后续带credentials的请求因缺失CSRF Token而被Sanctum拒绝。

是的,sanctum/csrf-cookie 必须明确加进 CORS 的 paths 配置里。
因为浏览器发起预检请求(OPTIONS)或首次获取 CSRF Token 时,会向 /sanctum/csrf-cookie 发起一个不带认证凭据的 GET 请求。如果这个路径没被 CORS 规则覆盖,响应头中就不会包含 Access-Control-Allow-Origin、Access-Control-Allow-Credentials: true 等关键字段,导致前端收不到 XSRF-TOKEN Cookie —— 后续所有带 withCredentials: true 的请求都会因缺少 CSRF Token 而被 Sanctum 拒绝。
✅ 正确配置 config/cors.php 的 paths
'paths' => [
'api/*',
'sanctum/csrf-cookie', // 必须显式加上
],
⚠️ 常见错误点
- 只写了
'api/*',漏掉'sanctum/csrf-cookie'→ 浏览器拿不到 Cookie -
supports_credentials设为true,但allowed_origins还用了['*']→ 浏览器直接报错,拒绝设置 Cookie - 前端调用
/sanctum/csrf-cookie时没加credentials: 'include'→ 即使后端返回了 Set-Cookie,浏览器也不会存
? 配合检查的几项关键配置
-
supports_credentials必须为true -
allowed_origins必须写具体域名(如['https://app.example.com', 'http://localhost:3000']),不能是['*'] - 前端 fetch 或 axios 请求中要带上:
credentials: 'include'
- 确保
App\Http\Kernel.php中HandleCors中间件已启用,且位置靠前(尤其在TrustProxies和认证中间件之前)
注意:/sanctum/csrf-cookie 路由本身不能被 auth:sanctum 或其他需要认证的中间件包裹,否则预检请求会被直接拦截。











