alireza5014 / laravel-cors
在 Laravel 或 Lumen 应用程序中发送 CORS 头
Requires
- php: ^7.2
- alireza5014/laravel-cors: dev-master
- illuminate/support: 5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8
Requires (Dev)
- orchestra/testbench: 3.5.*|3.6.*|3.7.*|3.8.*|^4.0
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2021-12-29 22:52:39 UTC
README
我们已放弃此包,因为 Laravel 7 引入了本机对 CORS 的支持。只有在使用 Laravel 6 或更低版本时才应使用此包。
在 Laravel 应用程序中发送 CORS 头
此包将为您的 Laravel 或 Lumen 应用程序的响应添加 CORS 头。有关 CORS 的更多信息,请参阅 Mozilla CORS 文档。
此包支持预检请求,并且易于配置以适应您的需求。
安装
Laravel
您可以通过 Composer 安装此包
composer require alireza5014/laravel-cors
包将自动注册其服务提供者。
提供的 alireza5014\Cors\Cors
中间件必须在全局中间件组中注册。
// app/Http/Kernel.php protected $middleware = [ ... \alireza5014\Cors\Cors::class ];
php artisan vendor:publish --provider="alireza5014\Cors\CorsServiceProvider" --tag="config"
这是在 config/cors.php
中发布的配置文件默认内容
return [ /* * A cors profile determines which origins, methods, headers are allowed for * a given requests. The `DefaultProfile` reads its configuration from this * config file. * * You can easily create your own cors profile. * More info: https://github.com/alireza5014/laravel-cors/#creating-your-own-cors-profile */ 'cors_profile' => alireza5014\Cors\CorsProfile\DefaultProfile::class, /* * This configuration is used by `DefaultProfile`. */ 'default_profile' => [ 'allow_credentials' => false, 'allow_origins' => [ '*', ], 'allow_methods' => [ 'POST', 'GET', 'OPTIONS', 'PUT', 'PATCH', 'DELETE', ], 'allow_headers' => [ 'Content-Type', 'X-Auth-Token', 'Origin', 'Authorization', ], 'expose_headers' => [ 'Cache-Control', 'Content-Language', 'Content-Type', 'Expires', 'Last-Modified', 'Pragma', ], 'forbidden_response' => [ 'message' => 'Forbidden (cors).', 'status' => 403, ], /* * Preflight request will respond with value for the max age header. */ 'max_age' => 60 * 60 * 24, ], ];
Lumen
您可以通过 Composer 安装此包
composer require alireza5014/laravel-cors
从供应商目录复制配置文件
cp vendor/alireza5014/laravel-cors/config/cors.php config/cors.php
在 bootstrap/app.php
中注册配置文件、中间件和服务提供者
$app->configure('cors'); $app->middleware([ alireza5014\Cors\Cors::class, ]); $app->register(alireza5014\Cors\CorsServiceProvider::class);
用法
安装中间件后,您的 API 路由现在应获得适当的 CORS 头。预检请求也将得到处理。如果收到不允许的请求,Laravel 将返回 403
响应。
此包的默认配置允许来自任何源的所有请求(表示为 '*'
)。您可能至少要指定一些与您的项目相关的源。如果您想允许来自 https://alireza5014.be
和 https://laravel.net.cn
的请求,请将那些域名添加到配置文件中
// config/cors.php ... 'default_profile' => [ 'allow_origins' => [ 'https://alireza5014.be', 'https://laravel.net.cn', ], ... ...
例如,如果您想允许来自特定域的所有子域的请求,您可以使用通配符星号(*
)并指定它
// config/cors.php ... 'default_profile' => [ 'allow_origins' => [ 'https://alireza5014.be', 'https://laravel.net.cn', 'https://*.alireza5014.be', 'https://*.laravel.com', ], ... ...
创建自己的 CORS 配置文件
假设您已经在其用户模型中添加了 allowed_domains
列,您想根据当前登录的用户指定允许的源。在这种情况下,仅读取配置文件的 DefaultProfile
将无法满足需求。幸运的是,编写自己的 CORS 配置文件非常简单,它只是一个扩展 alireza5014\Cors\DefaultProfile
的类。
以下是一个快速示例
namespace App\Services\Cors; use alireza5014\Cors\CorsProfile\DefaultProfile; class UserBasedCorsProfile extends DefaultProfile { public function allowOrigins(): array { return Auth::user()->allowed_domains; } }
您可以通过编辑配置文件中的 forbidden_response
数组来覆盖请求被禁止时返回的默认 HTTP 状态码和消息
'forbidden_response' => [ 'message' => 'Your request failed', 'status' => 400, ],
别忘了在配置文件中注册您的配置文件。
// config/cors.php ... 'cors_profile' => App\Services\Cors\UserBasedCorsProfile::class, ...
在上面的示例中,我们覆盖了 allowOrigins
方法,但当然您可以选择覆盖 DefaultProfile
中存在的任何方法。
测试
composer test
变更日志
请参阅 CHANGELOG 以获取更多关于最近变更的信息。
贡献
请参阅 CONTRIBUTING 获取详细信息。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 freek@alireza5014.be 而不是使用问题跟踪器。
替代方案
- barryvdh/laravel-cors:一个经过测试的包。我们的包是Barry的优秀包的基本功能的现代化重写。我们创建自己的解决方案,因为我们需要我们的配置非常 灵活。
Postcardware
您可以自由使用此包,但如果它进入了您的生产环境,我们非常希望您能从家乡寄给我们一张明信片,说明您正在使用我们哪些包。
我们的地址是:alireza5014,Samberstraat 69D,2060 安特卫普,比利时。
我们将所有收到的明信片 发布在我们的公司网站上。
致谢
支持我们
alireza5014 是一家总部位于比利时的安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述 在这里。
您的业务是否依赖于我们的贡献?在 Patreon 上与我们联系并支持我们。所有承诺都将专门用于分配人力进行维护和新酷炫的东西。
许可
MIT 许可证(MIT)。请参阅 许可文件 获取更多信息。