Laravel 8 配置 CORS 是为 Sanctum Token 认证提供跨域基础,必须设 supports_credentials => true、明确 allowed_origins、暴露 XSRF-TOKEN 头,并确保 EnsureFrontendRequestsAreStateful 在 HandleCors 前启用。

Laravel 8 配置 CORS 本身不直接“配置 Token”,而是为 Token 认证(尤其是 Sanctum 的 Cookie + Bearer 混合模式)提供必要的跨域通信基础。Token 能否正常传递、校验,高度依赖 CORS 设置是否允许凭据、暴露响应头、匹配源域名——否则浏览器会拦截 Cookie 或拒绝读取 Authorization 响应。
关键:CORS 必须支持凭据且精准限定来源
Sanctum 的 SPA 认证流程(先 GET /sanctum/csrf-cookie,再 POST /login)全程依赖浏览器自动携带 Cookie(laravel_session 和 XSRF-TOKEN)。若 CORS 不允许凭据,这些 Cookie 根本不会发出,后续所有 Token 相关操作都会失败(419 或 401)。
-
必须设置
supports_credentials => true—— 否则浏览器禁止发送任何 Cookie -
allowed_origins不能填*—— Chrome 等现代浏览器在supports_credentials为 true 时,会直接忽略通配符,导致 CORS 失效 -
明确列出前端地址,例如:
['http://localhost:5173', 'https://app.example.com']
config/cors.php 的最小安全配置
编辑 config/cors.php,确保包含以下内容:
-
'paths' => ['api/*', 'sanctum/csrf-cookie', 'login', 'logout']—— 覆盖认证核心路径 -
'allowed_origins' => ['http://localhost:5173']—— 开发环境用具体地址;生产环境换为正式域名 'supports_credentials' => true-
'allowed_headers' => ['*']—— 确保能接收Authorization、X-Requested-With等头 -
'exposed_headers' => ['XSRF-TOKEN']—— 前端 JS 需要读取该头用于后续请求携带
中间件顺序决定 Token 是否生效
CORS 中间件(Fruitcake\Cors\HandleCors)和 Sanctum 的状态保持中间件(EnsureFrontendRequestsAreStateful)必须按正确顺序启用:
- 在
app/Http/Kernel.php的$middlewareGroups['api']数组**开头**加入:\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class - 紧随其后或同组内加入:
\Fruitcake\Cors\HandleCors::class - 二者都必须在
throttle:api之前 —— 否则限流可能提前中断带 Cookie 的请求
Token 使用场景对应配置要点
区分你是用 Sanctum 的 Cookie 模式(SPA 推荐),还是纯 Bearer Token 模式(如 Postman 测试):
-
Cookie 模式(Vue/React 前端):依赖 CORS 允许凭据 + CSRF cookie +
auth:sanctumguard,config/auth.php中'api' => ['driver' => 'sanctum']必须正确 -
Bearer Token 模式(第三方调用):不依赖 Cookie,但需确保
exposed_headers包含Authorization(如需返回新 token),且路由走api/*组以启用auth:sanctum


















