Laravel中Access-Control-Allow-Credentials头配置错误的CORS问题解决
解决Laravel中Access-Control-Allow-Credentials头未正确设置的问题
问题根源
你当前的问题出在自定义CORS中间件与Laravel自带的CORS处理逻辑冲突,同时存在两个关键配置错误:
- 当开启凭证支持(
supports_credentials = true)时,Access-Control-Allow-Origin不能设为*,浏览器会拒绝这种不安全的配置 - 自定义中间件直接用
header()函数设置的头信息,可能被Laravel响应对象的后续处理覆盖
修复步骤
1. 移除自定义OwnCors中间件
自定义中间件会干扰Laravel原生的CORS处理逻辑,直接删除即可:
- 删除
app/Http/Middleware/OwnCors.php文件 - 打开
app/Http/Kernel.php,移除所有关于OwnCors的注册代码(包括$middleware或$middlewareGroups中的引用)
2. 修正config/cors.php配置
将allowed_origins改为具体允许的域名(移除*,凭证模式下不支持通配符),并调整其他参数:
<?php return [ 'paths' => ['api/*', 'api/admin/*', '*'], 'allowed_methods' => ['*'], 'allowed_origins' => [ 'http://localhost:3000', 'https://personaltrainerkmm.com', 'https://traning-app.vercel.app', 'https://fitnesspt.personaltrainerkmm.com' // 新增你的前端域名 ], 'allowed_origins_patterns' => [], 'allowed_headers' => ['*'], 'exposed_headers' => [], 'max_age' => 3600, 'supports_credentials' => true, ];
3. 确认CORS中间件正确注册
打开app/Http/Kernel.php,确保api中间件组中包含原生CORS处理中间件:
protected $middlewareGroups = [ 'web' => [ // ...其他中间件 ], 'api' => [ \Fruitcake\Cors\HandleCors::class, // 确保此行存在(Laravel 8+默认已包含) 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ];
4. 清除配置缓存
执行以下命令让新配置生效:
php artisan config:clear php artisan cache:clear
关键说明
- 当使用凭证(如Cookie、HTTP认证)时,浏览器强制要求
Access-Control-Allow-Origin必须是具体域名,不能使用通配符* - Laravel自带的CORS中间件会自动处理预检请求(OPTIONS)和实际请求的头信息,无需手动编写中间件
内容的提问来源于stack exchange,提问作者Hocine Djouamaa
相关产品推荐
相关产品推荐

