laravel 9 默认集成 cors 支持,需在 kernel.php 的 api 组中启用 handlecors 中间件,配置 cors.php 的 paths、allowed_origins(不可为 * 当 supports_credentials=true 时)、supports_credentials=true,并确保 react 前端 fetch 携带 credentials: 'include'。

Laravel 9 默认已集成 CORS 支持,无需额外安装 fruitcake/laravel-cors(该包在 Laravel 9+ 中逻辑已合并进核心),但你仍需正确配置和启用它,才能让 React 前端(如运行在 http://localhost:3000)安全、稳定地调用 API。
确认并启用 CORS 中间件
打开 app/Http/Kernel.php,检查 $middlewareGroups['api'] 数组是否包含以下中间件:
-
\Fruitcake\Cors\HandleCors::class(Laravel 9+ 通常默认存在) - 同时确保
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class在其前或同组中(尤其当你用 Http-only Cookie 登录时)
若缺失,请手动添加,并确保它位于 Sanctum 中间件之后或按需调整顺序。
配置 config/cors.php 文件
运行命令生成配置文件(即使 Laravel 9 内置,也建议发布以自定义):
编辑 config/cors.php,关键项设置如下:
-
paths:设为
['api/*', 'sanctum/csrf-cookie'],覆盖所有 API 接口及 CSRF 初始化路由 -
allowed_origins:明确列出 React 域名,例如
['http://localhost:3000', 'https://your-react-app.com'];禁止设为['*']当supports_credentials为 true 时 -
supports_credentials:设为
true(必须!否则浏览器不发送 Cookie,影响登录态保持) -
allowed_methods 和 allowed_headers 可保留
['*'],开发阶段足够安全
React 前端配合要点
CORS 是前后端协同机制,后端配好只是第一步。React 侧需同步适配:
- 使用
fetch时,务必加credentials: 'include' - 使用
axios时,设置withCredentials: true(全局或单请求) - API 请求 baseURL 应指向 Laravel 后端地址,如
http://localhost:8000/api - 首次交互前,建议先 GET
/sanctum/csrf-cookie获取并建立会话凭证
验证与调试提示
启动 Laravel 开发服务器后,访问一个 API 路由(如 /api/user),用浏览器开发者工具查看响应头:
- 应包含
Access-Control-Allow-Origin: http://localhost:3000 - 应包含
Access-Control-Allow-Credentials: true - 预检请求(OPTIONS)应返回 200,且含对应 Allow 头
若仍报错,优先检查控制台是否提示 “Origin is not allowed”,这说明 allowed_origins 未匹配当前 React 地址(注意协议、端口、末尾斜杠)。











