elevationdigital / laravel-cors

在您的 Laravel 应用程序中添加 CORS (跨源资源共享) 头支持

支持包维护!
barryvdh

v1.0.3 2019-12-31 17:28 UTC

README

Software License Build Status Total Downloads

基于 https://github.com/asm89/stack-cors

关于

laravel-cors 包允许您通过 Laravel 中间件配置发送 跨源资源共享 头。

如果您想了解 CORS 工作流程的全貌,可以浏览此 图片

从 0.x 版本升级

从 0.x 版本升级时,有一些破坏性变更

  • 供应商名称已更改(见安装/使用说明)
  • 不再支持中间件分组。
  • 使用新的 'paths' 属性来启用/禁用特定路由上的 CORS。默认为空!

功能

  • 处理 CORS 预检 OPTIONS 请求
  • 向您的响应中添加 CORS 头
  • 匹配路由,只为特定请求添加 CORS

安装

在您的 composer.json 中要求 fruitcake/laravel-cors 包并更新您的依赖项

composer require fruitcake/laravel-cors

全局使用

要允许所有路由的 CORS,请将 HandleCors 中间件添加到 app/Http/Kernel.php 类的 $middleware 属性中

protected $middleware = [
    // ...
    \Fruitcake\Cors\HandleCors::class,
];

现在更新配置以定义您要运行 CORS 服务的路径(见下文配置)

'paths' => ['api/*'],

配置

默认设置在 config/cors.php 中。发布配置以将文件复制到您的配置中

php artisan vendor:publish --tag="cors"

注意:当使用自定义头,如 X-Auth-TokenX-Requested-With 时,您必须将 allowed_headers 设置为包含这些头。您也可以将其设置为 ['*'] 以允许所有自定义头。

注意:如果您明确列出白名单头,则必须包含 Origin 或请求将无法被识别为 CORS。

<?php

return [

    /*
     * You can enable CORS for 1 or multiple paths.
     * Example: ['api/*']
     */
    'paths' => [],

    /*
    * Matches the request method. `[*]` allows all methods.
    */
    'allowed_methods' => ['*'],

    /*
     * Matches the request origin. `[*]` allows all origins.
     */
    'allowed_origins' => ['*'],

    /*
     * Matches the request origin with, similar to `Request::is()`
     */
    'allowed_origins_patterns' => [],

    /*
     * Sets the Access-Control-Allow-Headers response header. `[*]` allows all headers.
     */
    'allowed_headers' => ['*'],

    /*
     * Sets the Access-Control-Expose-Headers response header.
     */
    'exposed_headers' => false,

    /*
     * Sets the Access-Control-Max-Age response header.
     */
    'max_age' => false,

    /*
     * Sets the Access-Control-Allow-Credentials header.
     */
    'supports_credentials' => false,
];

allowed_originsallowed_headersallowed_methods 可以设置为 ['*'] 以接受任何值。

注意:尽可能具体。您可以从宽松的约束开始开发,但最好尽可能严格!

注意:由于 Laravel 中的 HTTP 方法重写,允许 POST 方法也会使 API 用户能够执行 PUT 和 DELETE 请求。

Lumen

在 Laravel Lumen 中,只需手动注册 ServiceProvider

$app->register(\Fruitcake\Cors\CorsServiceProvider::class);

Lumen 的全局使用

要允许所有路由的 CORS,请将 HandleCors 中间件添加到全局中间件,并在配置中设置 paths 属性。

$app->middleware([
    // ...
    \Fruitcake\Cors\HandleCors::class,
]);

禁用 API 的 CSRF 保护

如果可能,使用启用 CSRF 保护的不同的路由组。否则,您可以在 App\Http\Middleware\VerifyCsrfToken 中禁用某些请求的 CSRF。

protected $except = [
    'api/*'
];

许可协议

在 MIT 许可协议下发布,请参阅 LICENSE