Files
ntonpower/app/api/middleware/Auth.php
2026-10-14 14:00:29 +08:00

79 lines
2.8 KiB
PHP

<?php
namespace app\api\middleware;
use think\facade\Cache;
use think\facade\Config;
use think\facade\Env;
use utils\Jwt;
/**
* 全局路由中间件-验证权限
* Class Auth
* @package app\api\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-Credentials:true");
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");
$config = [
'iss' => Env::get('jwt_config.iss'),
'exp' => Env::get('jwt_config.exp')
];
$jwt = new Jwt($config);
$route = strtolower($request->pathinfo());
$domain = strtolower($request->host());
if (in_array($route,Config::get('whitelist.route')) or in_array($domain,Config::get('whitelist.domain'))) {
//表示此系列请求不需要鉴权,直接通行
return $next($request);
} else {
//此系列请求需要鉴权。
$loginToken = $request->header('x-token');
$result = $jwt->checkToken($loginToken);
if ($result < 0) {
switch ($result) {
case -1:
show(-1,"token异常");
break;
case -2:
show(-2,"token被篡改");
break;
case -3:
show(-3,"token验签异常");
break;
case -4:
show(-4,"token已过期");
break;
}
} elseif ($result === 200 || $result === 201) {
// token通过
$adminInfo = $jwt->getUserInfo($loginToken);
if (!isset($adminInfo['id'])) {
show(-1001, '登录异常');
}
if (empty($adminInfo) || $adminInfo['status'] == 1) {
show(-1002, '登录异常');
}
if ($result === 201) {
$new_login_token = $jwt->getToken($adminInfo);
$data = [
'login_token' => $new_login_token,
'exp' => Env::get('jwt_config.exp')
];
header("Access-Control-Expose-Headers: X-Token-info");
header("X-Token-info: " . base64_encode(json_encode($data)));
}
$adminInfo['auth_id_list'] = [];//权限菜单下发
$request->admin_user_info = $adminInfo;
return $next($request);
}
}
}
}