我在为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,
];
答案 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服务器端的标头。
执行此操作的首选方法是保留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.