neomerx/cors-illuminate

CORS (跨源资源共享) 支持 Laravel 和 Lumen

v3.0.0 2020-01-30 16:33 UTC

This package is auto-updated.

Last update: 2024-09-19 05:03:22 UTC


README

Project Management Scrutinizer Code Quality Code Coverage Build Status License

描述

此包为 Laravel 应用程序添加了 跨源资源共享 (CORS) 支持。

该包基于 框架无关 (PSR-7) CORS 实现

当前版本 V3 为 Laravel 6 或更高版本设计。如果您使用的是较低版本的 Laravel,请使用 V2

安装

1 Composer

composer require neomerx/cors-illuminate

2.1 Laravel

对于 Lumen,跳过此步骤并查看步骤 2.2

通过执行以下命令创建配置文件:

php artisan vendor:publish --provider="Neomerx\CorsIlluminate\Providers\LaravelServiceProvider"

它将在您的应用程序中创建 config/cors-illuminate.php 文件。

app/Http/Kernel.php 文件中将 CORS 中间件添加到您的 HTTP 栈中。中间件应添加到 $middleware 列表中,该列表用于执行所有路由(即使不在您的路由文件中声明)。出于性能考虑,最好在 '重' 中间件之前添加。

class Kernel extends HttpKernel
{
    ...

    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Neomerx\CorsIlluminate\CorsMiddleware::class, // <== add this line
        
        ...
    ];
    
    ...
}

然后查看第 3 步

2.2 Lumen

对于 Laravel,跳过此步骤

bootstrap/app.php 中将 CORS 添加到全局中间件列表中

$app->middleware([
    ...
    \Neomerx\CorsIlluminate\CorsMiddleware::class,
]);

并注册 CORS 提供者

$app->register(\Neomerx\CorsIlluminate\Providers\LumenServiceProvider::class);

由于 Lumen 不支持 vendor:publish 命令,因此需要手动将文件 vendor/neomerx/cors-illuminate/config/cors-illuminate.php 复制到 config/cors-illuminate.php

然后查看第 3 步

3 配置

配置文件 已进行了详尽的注释,因此很容易为您自己的需求进行设置。您需要首先配置的设置是服务器源 (URL) 和允许的源

    ...
    
    /**
     * Could be string or array. If specified as array (recommended for
     * better performance) it should be in parse_url() result format.
     */
    Settings::KEY_SERVER_ORIGIN => [
        'scheme' => 'http',
        'host'   => 'localhost',
        'port'   => 1337,
    ],

    /**
     * A list of allowed request origins (no trail slashes).
     * If value is not on the list it is considered as not allowed.
     * If you want to allow all origins remove/comment this section.
     */
    Settings::KEY_ALLOWED_ORIGINS => [
        'http://localhost:4200',
    ],
    
    ...

异常和 CORS 头部

当抛出异常并在 Laravel/Lumen 异常处理器 中创建响应时,中间件将被排除在处理响应之外。这意味着 CORS 中间件不会将其 CORS 头部添加到响应中。因此,CORS 结果(包括头部)注册在 Laravel/Lumen 容器 中,并使任何应用程序部分(包括异常处理器)都可以访问。

读取 CORS 头部的代码示例

use Neomerx\Cors\Contracts\AnalysisResultInterface;

$corsHeaders = [];
if (app()->resolved(AnalysisResultInterface::class) === true) {
    /** @var AnalysisResultInterface $result */
    $result = app(AnalysisResultInterface::class);
    $corsHeaders = $result->getResponseHeaders();
}

自定义

此包提供多种方法来自定义其行为。

以下类 CorsMiddleware 的方法可以在派生类中替换

  • getResponseOnError 您可以覆盖此方法以自定义错误回复。
  • getCorsAnalysis 您可以覆盖此方法以修改 CORS 分析结果保存到 Illuminate 容器的方式。
  • getRequestAdapter 您可以覆盖此方法以替换 IlluminateRequestToPsr7 适配器。

此外,可以通过以下方式注入自定义 AnalysisStrategyInterface

  • 通过覆盖 Laravel/Lumen 的 ServiceProvider 中的 getCreateAnalysisStrategyClosure 方法
  • 使用 Laravel/Lumen 容器绑定 对接口 AnalysisStrategyInterface

此外,可以通过以下方式注入自定义 AnalyzerInterface

  • 通过覆盖 Laravel/Lumen 的 ServiceProvider 中的 getCreateAnalyzerClosure 方法
  • 使用Laravel/Lumen 容器绑定进行AnalyzerInterface接口的使用

测试

composer test

贡献

欢迎提交关于文档和代码改进(PSR-2,测试)的拉取请求。

版本管理

本软件包使用语义化版本控制

许可证

Apache许可证(版本2.0)。请参阅许可证文件以获取更多信息。