alireza5014/laravel-cors

在 Laravel 或 Lumen 应用程序中发送 CORS 头

dev-master 2021-08-29 21:57 UTC

This package is auto-updated.

Last update: 2021-12-29 22:52:39 UTC


README

我们已放弃此包,因为 Laravel 7 引入了本机对 CORS 的支持。只有在使用 Laravel 6 或更低版本时才应使用此包。

在 Laravel 应用程序中发送 CORS 头

Latest Version on Packagist Build Status Quality Score StyleCI Total Downloads

此包将为您的 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.behttps://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)。请参阅 许可文件 获取更多信息。