laravel 12 配置 cors 需发布 config/cors.php 并精确设置 allowed_origins(禁用 '*')、启用 supports_credentials 时同步配置 session.domain 为 '.example.com',并在 api 中间件组中注册 handlecors。

在 Laravel 12 中配置 CORS 域名,核心是明确指定 allowed_origins,**不能用 ***(尤其当涉及 Cookie、Session 或认证凭据时)。Laravel 12 默认已集成 fruitcake/laravel-cors 的逻辑(基于社区包的演进),但配置方式与 Laravel 9–11 一致,仍需手动发布和编辑 config/cors.php。
确认并发布 CORS 配置文件
即使 Laravel 12 自动发现服务提供者,也必须执行以下命令生成可编辑的配置:
php artisan vendor:publish --tag="cors"
这会在 config/cors.php 创建配置文件。若已存在,确保它是最新的(检查是否含 paths、supports_credentials 等字段)。
设置允许的域名(allowed_origins)
在 config/cors.php 中,找到 allowed_origins 项,填入具体协议 + 域名 + 端口(开发/生产均需精确):
- 本地开发示例:
['http://localhost:3000', 'http://127.0.0.1:3000'] - 线上环境示例:
['https://admin.example.com', 'https://app.example.com'] - 子域名通配需后端配合(如
https://*.example.com不被浏览器支持),应逐个列出或用中间件动态解析
⚠️ 若启用了 supports_credentials => true(如需跨域传 Cookie 或调用 sanctum/csrf-cookie),allowed_origins 绝对不可为 ['*'],否则浏览器直接拒绝响应。
关联 Session 域名(关键补充)
仅配 CORS 不足以让跨域 Cookie(如 Session)生效,还需同步设置 Laravel 的 Session 域名:
- 打开
config/session.php - 将
'domain'改为根域名(带前导点),例如:'.example.com' - 这样
session_id才能在admin.example.com和api.example.com间共享
同时确保 config/cors.php 中 supports_credentials 为 true,且 allowed_origins 包含对应前端域名。
启用中间件并验证路径范围
Laravel 12 推荐按路由组启用 CORS,避免影响 Web 页面:
- 打开
app/Http/Kernel.php - 在
$middlewareGroups['api']数组中加入:\Fruitcake\Cors\HandleCors::class - 检查
config/cors.php的paths是否覆盖你的 API 路由,例如:['api/*', 'sanctum/csrf-cookie']
这样只有以 /api/ 开头或请求 CSRF Cookie 的请求才会触发 CORS 头,更安全可控。











