79 lines
2.8 KiB
PHP
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);
|
|
}
|
|
}
|
|
}
|
|
} |