You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中Access-Control-Allow-Credentials头配置错误的CORS问题解决

解决Laravel中Access-Control-Allow-Credentials头未正确设置的问题

问题根源

你当前的问题出在自定义CORS中间件与Laravel自带的CORS处理逻辑冲突,同时存在两个关键配置错误:

  1. 当开启凭证支持(supports_credentials = true)时,Access-Control-Allow-Origin不能设为*,浏览器会拒绝这种不安全的配置
  2. 自定义中间件直接用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 10:41:23