Files
2026-10-14 14:00:29 +08:00

81 lines
3.1 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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);
}
}