You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.6 KiB
70 lines
1.6 KiB
<?php |
|
/** |
|
* |
|
* HeaderAllow.php |
|
* User: ChenLong |
|
* DateTime: 2020/4/14 15:16 |
|
*/ |
|
|
|
|
|
namespace app\middleware; |
|
|
|
|
|
use think\Request; |
|
|
|
/** |
|
* 跨域设置 |
|
* Class HeaderAllow |
|
* @package app\middleware |
|
* @author chenlong <vip_chenlong@163.com> |
|
*/ |
|
class CrossDomain |
|
{ |
|
/** |
|
* 允许的跨域设置的app |
|
* @return array |
|
*/ |
|
private function allowApp() |
|
{ |
|
return explode(',', env('CROSS_DOMAIN.ALLOW_APP', '')); |
|
} |
|
|
|
/** |
|
* 允许的参数 |
|
* @return array |
|
*/ |
|
private function allowParam() |
|
{ |
|
$allowParam = [ |
|
'Authorization', 'Content-Type', 'If-Match', 'If-Modified-Since', |
|
'If-None-Match', 'If-Unmodified-Since', 'X-Requested-With', |
|
// 上面是常用,下面是加Token时定义 |
|
'Token', 'Refresh-Token' |
|
]; |
|
|
|
// debug 模式时免token验证 |
|
if (env('APP_DEBUG') && env('CROSS_DOMAIN.NO_TOKEN')) { |
|
$allowParam[] = env('CROSS_DOMAIN.NO_TOKEN') ; |
|
} |
|
|
|
return $allowParam; |
|
} |
|
|
|
|
|
public function handle(Request $request, \Closure $closure) |
|
{ |
|
if (in_array(app('http')->getName(), $this->allowApp())) { |
|
|
|
$Origin = env('APP_DEBUG') ? '*' : env('CROSS_DOMAIN.ALLOW_DOMAIN', '*'); |
|
|
|
header('Access-Control-Allow-Origin:' . $Origin); |
|
header('Access-Control-Allow-Methods:' . env('CROSS_DOMAIN.ALLOW_METHOD', 'POST,GET,OPTIONS')); |
|
header('Access-Control-Allow-Headers:' . implode(',', $this->allowParam())); |
|
// 更多.... |
|
|
|
} |
|
|
|
return $closure($request); |
|
} |
|
} |
|
|
|
|