如何在Laravel中为开发和生产使用不同的cors配置

时间:2019-02-20 18:27:31

标签: php laravel cors

我在为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,
];

3 个答案:

答案 0 :(得分:2)

<?php
switch(env('APP_ENV')){
case 'development':
return [... config array ...];
break;

case 'staging':
return [... config array ...];
break;

case 'production':
return [... config array ...];
break;
}

答案 1 :(得分:1)

正确的方法是使用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密钥的值即可。

答案 2 :(得分:0)

让服务器处理

CORS标头可以由您的HTTP(S)服务器发送,因此您只需配置两个服务器即可为您设置标头。除非您是在域之间进行请求或使用网络套接字,否则您实际上不需要弄乱Laravel的默认CORS设置,该设置应使用.env中的APP_URL进行设置。即使使用websocket或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.