Laravel 12 中限制 API 仅指定域名访问需安装 fruitcake/laravel-cors,发布并配置 config/cors.php,设置 allowed_origins 为 ['https://admin.yourapp.com', 'http://localhost:3000']、paths 为 ['api/', 'sanctum/csrf-cookie'],全局注册 HandleCors 中间件且置于 $middleware 最前,supports_credentials=true 时严禁 allowed_origins 含 ''。

在 Laravel 12 中,要让 API 只允许指定域名(如 https://admin.yourapp.com 或 http://localhost:3000)访问,核心是正确配置 config/cors.php 并配合中间件生效。注意:这属于前端请求层面的控制,不能替代 Token、JWT 等服务端真实鉴权。
确认已安装并启用 fruitcake/laravel-cors
这是 Laravel 官方推荐的 CORS 解决方案,Laravel 12 默认不内置,需手动安装:
- 运行
composer require fruitcake/laravel-cors - Laravel 12 支持自动服务提供者发现,无需手动添加到
config/app.php - 发布配置文件:
php artisan vendor:publish --tag="cors",生成config/cors.php - 确保
\Fruitcake\Cors\HandleCors::class已注册在app/Http/Kernel.php的$middleware全局数组中(放在最前面)
精准配置 allowed_origins 白名单
打开 config/cors.php,重点修改以下项:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
-
不要用
'*'—— 生产环境严禁通配,否则失去限制意义 'allowed_origins' => ['https://admin.yourapp.com', 'https://app.yourapp.com', 'http://localhost:3000']- 协议、域名、端口必须完全匹配(
https://yourapp.com≠http://yourapp.com) - 如需支持子域泛匹配(如所有
*.yourapp.com),可配合allowed_origins_patterns使用正则,例如:'^https?://(?:[a-z0-9\-]+\.)?yourapp\.com$'
设置 paths 限定作用范围
避免对非 API 路由误加 CORS 头,明确只作用于 API 接口:
立即学习“PHP免费学习笔记(深入)”;
'paths' => ['api/*', 'sanctum/csrf-cookie']- 若使用 Sanctum 登录,
sanctum/csrf-cookie需保留以支持 CSRF 防护 - 不建议写
['*'],防止 Web 页面路由也被暴露跨域策略
处理凭据与安全性细节
当前端携带 Cookie 或 Authorization 头时,必须同步调整两项:
-
'supports_credentials' => true(如需登录态共享) -
此时
allowed_origins绝对不可为'*',否则浏览器会直接拒绝请求 - 如果不需要 Cookie,设为
false更简单安全;设为true则必须用明确域名列表


















