【问题标题】:How to have different cors configuration for development and production in laravel如何在 laravel 中为开发和生产使用不同的 cors 配置
【发布时间】:2019-07-14 12:52:13
【问题描述】:

我在 Laravel 中为生产和开发设置不同的 cors 配置时遇到了一些问题:

<?php

  return [
   /*
  |--------------------------------------------------------------------------
  | Laravel CORS
  |--------------------------------------------------------------------------
  |
  | allowedOrigins, allowedHeaders and allowedMethods can be set to array('*')
  | to accept any value.
  |
   */
  'supportsCredentials' => false,
  'allowedOrigins' => ['https://www.example.com'],
  'allowedHeaders' => ['*'],
  'allowedMethods' => ['*'],
  'exposedHeaders' => [],
  'maxAge' => 0,
];

【问题讨论】:

  • 列出所有这些可能是安全的。或者,您可以在配置文件中进行 env('APP_ENV') 开关并返回 $config 而不是 return []。

标签: php laravel cors


【解决方案1】:

让服务器处理

CORS 标头可以由您的 HTTP(S) 服务器发送,因此您只需配置两个服务器即可为您设置标头。除非你在域之间请求或使用 websockets,否则你真的不需要弄乱 Laravel 的默认 CORS 设置,它应该使用.env 中的 APP_URL 进行设置。即使使用 websockets 或 echo,必须更改的标头也是 websocket 服务器端的标头。

使用 .env

这样做的首选方法是保留 2 个不同的 .env 文件,一个用于开发和生产。在你的 .envs 中设置一个变量:

AllowedOringin=[https://www.example.com]
#etc.

然后在配置中引用 env,如果未设置,请给出合理的默认值:

'allowedOrigins' => [env('AllowedOrigin',['https://www.example.com'])],
//etc.

或者检查环境

或者,您可以检查您所在的环境并在配置中设置值。这不被认为是健壮或易于修改的,但实际上两者在逻辑上是等价的。

AllowedOrigin => (App::environment() == 'production') ? ['https://www.example.com'] : ['*'],
//etc.

【讨论】:

    【解决方案2】:
    <?php
    switch(env('APP_ENV')){
    case 'development':
    return [... config array ...];
    break;
    
    case 'staging':
    return [... config array ...];
    break;
    
    case 'production':
    return [... config array ...];
    break;
    }
    

    【讨论】:

      【解决方案3】:

      正确的做法是使用env 辅助函数从.env 文件中检索变量。

      如下更改你的 cors.php

      <?php
      
        return [
         /*
        |--------------------------------------------------------------------------
        | Laravel CORS
        |--------------------------------------------------------------------------
        |
        | allowedOrigins, allowedHeaders and allowedMethods can be set to array('*')
        | to accept any value.
        |
         */
        'supportsCredentials' => env('supportsCredentials', false),
        'allowedOrigins' => env('allowedOrigins', ['https://www.example.com']),
        'CONFIG_KEY' => env('CONFIG_KEY', *default_value*),
        ...
      ];
      

      现在在您的 .env 文件中指定环境特定 cors 键的值。

      【讨论】:

        猜你喜欢
        • 2018-03-08
        • 2018-03-31
        • 1970-01-01
        • 2015-07-17
        • 2017-12-20
        • 1970-01-01
        • 2016-10-03
        • 2013-02-21
        • 1970-01-01
        相关资源
        最近更新 更多