laravel 10 默认不再自动注册fruitcake/laravel-cors的service provider,因其功能已内化,推荐直接使用handlecors中间件并确保其在kernel.php中正确注册。

Laravel 10 默认不再自动注册 fruitcake/laravel-cors 的 Service Provider,因为该包从 Laravel 9.2 起已逐步被框架内部逻辑吸收,而 Laravel 10 更倾向使用 HandleCors 中间件直接集成,不再依赖手动注册 Provider。
不过,如果你仍选择使用 fruitcake/laravel-cors(比如项目沿用旧配置或需细粒度控制),以下是正确配置 Provider 的方式:
✅ 正确配置 Provider(仅当显式安装了 fruitcake/laravel-cors)
-
确认已安装包
composer require fruitcake/laravel-cors
-
Provider 会自动发现(Laravel 10+ 默认启用 Package Discovery)
Laravel 10 默认开启composer.json中的"extra": {"laravel": {"dont-discover": []}},因此Fruitcake\Cors\CorsServiceProvider通常无需手动添加到config/app.php—— 它会自动注册。⚠️ 注意:Laravel 10 已移除
config/app.php中的$providers数组传统写法(即不推荐再往providers键里手动追加),而是统一由 Composer 自动发现。 -
验证 Provider 是否生效
运行以下命令检查是否已加载:php artisan package:discover
输出中应包含:
Discovered Package: fruitcake/laravel-cors
-
发布并配置
cors.phpphp artisan vendor:publish --tag="cors"
配置
config/cors.php,例如:'paths' => ['api/*', 'sanctum/csrf-cookie'], 'allowed_origins' => ['http://localhost:5173'], // ❗不能为 '*' + supports_credentials=true 'supports_credentials' => true, 'allowed_headers' => ['*'], 'allowed_methods' => ['*'],
-
确保中间件已启用(关键!)
Laravel 10 不再通过 Provider 启用中间件,而是靠你主动注册。打开app/Http/Kernel.php:-
✅ 全局启用(推荐 API 项目):
在$middleware数组顶部加入:\Fruitcake\Cors\HandleCors::class,
-
✅ 仅 API 路由启用(更常见):
确保$middlewareGroups['api']包含:\Fruitcake\Cors\HandleCors::class,
-
? 不需要做这些(Laravel 10 常见误区)
- 不要手动在
config/app.php的'providers'中添加Fruitcake\Cors\CorsServiceProvider::class(该文件在 Laravel 10 中已无此数组); - 不要尝试在
bootstrap/app.php中register()它(Laravel 10 使用bootstrap/providers.php,但 cors 包不在此处注册); - 不要依赖
CorsServiceProvider来“启动”中间件逻辑——真正起作用的是HandleCors类被放入$middleware或$middlewareGroups。
? 补充:Laravel 10 原生 CORS 支持(无第三方包)
Laravel 10 内置了轻量 CORS 处理能力(尤其配合 Sanctum),若你只用 sanctum/csrf-cookie 和基础 API 跨域,可跳过 fruitcake/laravel-cors,改用:
- 在
config/cors.php中配置(即使没装包,Laravel 10 也会读取该文件); - 确保
App\Http\Middleware\HandleCors(即fruitcake的类)已在中间件数组中 —— 因为 Laravel 10 的vendor:publish --tag=cors会生成配置,但中间件类仍需包支持; - 所以:若不想装包,就别用
HandleCors;想用它,就必须装fruitcake/laravel-cors。
简言之:Provider 由 Composer 自动处理,你只需管好中间件注册和 config/cors.php。











