81 lines
3.1 KiB
PHP
81 lines
3.1 KiB
PHP
<?php
|
||
namespace app\index\middleware;
|
||
|
||
use app\index\model\Language;
|
||
use app\index\model\Site;
|
||
use think\facade\Cache;
|
||
|
||
/**
|
||
* 全局路由中间件-验证接口请求的有效性
|
||
* Class Auth
|
||
* @package app\index\middleware
|
||
*/
|
||
class Auth
|
||
{
|
||
public function handle($request, \Closure $next)
|
||
{
|
||
header("Access-Control-Allow-Origin:*");
|
||
header("Access-Control-Allow-Methods:GET, POST, PATCH, PUT, DELETE,OPTIONS");
|
||
header("Access-Control-Allow-Headers:Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-Requested-With,x_requested_with,x-token");
|
||
//获取请求过来的域名与后台绑定域名是否一致
|
||
$url = $request->host();
|
||
//兼容老数据,1=英文,或者传 us-en, zh-cn,jp
|
||
$language = $request->param()['language_id']??'zh-cn';
|
||
|
||
if ($language == 'zh-cn') {
|
||
$languageId = 1;
|
||
} else {
|
||
if (is_numeric($language)) {
|
||
show(-999,lang('无效的语言包请求'));
|
||
}
|
||
$lang = new Language();
|
||
$info = $lang->where('code',$language)->where('status',0)->findOrEmpty()->toArray();
|
||
if (empty($info)) {
|
||
show(-998,lang('语言包ID不正确'));
|
||
}
|
||
$languageId = $info['id'];
|
||
}
|
||
// 查找当前品牌所有的语言站点
|
||
$site = new Site();
|
||
$domain = [];
|
||
$languageCode = '';
|
||
if (Cache::has('site_info')) {
|
||
$siteInfo = Cache::get('site_info');
|
||
$languageCode = Cache::get('language_info_'.$languageId) ?: 'zh-cn';
|
||
$domain = array_column($siteInfo,'domain');
|
||
} else {
|
||
$siteInfo = $site->where(['platform_id'=>1,'status'=>0])->select()->toArray();
|
||
$languageInfo = $site->where(['language_id'=>$languageId,'platform_id'=>1,'status'=>0])->select()->toArray();
|
||
if (!empty($languageInfo)) {
|
||
$languageCode = $languageInfo[0]['code'] ?? 'zh-cn';
|
||
}
|
||
|
||
if (!empty($siteInfo)) {
|
||
$domain = array_column($siteInfo,'domain');
|
||
}
|
||
Cache::set('site_info',$siteInfo,7200);
|
||
Cache::set('language_info_'.$languageId,$languageCode,7200);
|
||
}
|
||
|
||
//检测域名是否合法,添加测试域名
|
||
$devDomain = ['setmspace.test','setmspace.com','setmspace.cn','dev.setm.f2b211.com'];
|
||
$domain = array_column($domain,'domain');
|
||
$wholeDomain = array_merge($devDomain,$domain);
|
||
|
||
if (!in_array($url,$wholeDomain)) {
|
||
//表示请求域名不是绑定的域名,抛出异常
|
||
show(-995,lang("绑定域名不正确,请检查后台设置"));
|
||
}
|
||
|
||
//老站点英文站兼容密钥
|
||
$request->platform_id = 1;/*强制为1*/
|
||
$request->language_id = $languageId;
|
||
$request->language_code = $languageCode;
|
||
//组装语言ID请求数据
|
||
$post = $request->post();
|
||
$post['language_id'] = $languageId;
|
||
$request->withPost($post);
|
||
return $next($request);
|
||
}
|
||
}
|