cmbYouku_Api/app/middleware/Request.php

47 lines
1.7 KiB
PHP
Raw Permalink Normal View History

2024-07-01 15:57:07 +08:00
<?php
declare (strict_types = 1);
namespace app\middleware;
use app\config\BusinessCacheKey;
use app\config\BusinessCode;
use app\exception\BusinessException;
use app\service\util\RedisService;
use app\util\SessionUtil;
use Firebase\JWT\ExpiredException;
use Firebase\JWT\SignatureInvalidException;
class Request
{
public function handle(\think\Request $request, \Closure $next): \think\Response
{
$token = SessionUtil::getToken();
if (empty($token)) {
throw new BusinessException('需要登录', BusinessCode::LOGIN_INVALID);
}
$client = RedisService::getRedisInstance();
if (empty($client->sismember(BusinessCacheKey::SITE_TOKEN_LIST['key'], $token))) {
throw new BusinessException('需要登录', BusinessCode::LOGIN_INVALID);
}
try {
$data = \Firebase\JWT\JWT::decode($token, new \Firebase\JWT\Key(env('jwt_token_key'), 'HS256'));
SessionUtil::setUser($data->data);
} catch (ExpiredException $e) {
throw new BusinessException('请重新授权登陆', BusinessCode::LOGIN_INVALID);
} catch (SignatureInvalidException|\Throwable $e) {
throw new BusinessException('签名验证失败', BusinessCode::LOGIN_INVALID);
}
return $next($request);
}
public function end(\think\Response $response): \think\Response
{
$response->header([
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'GET, POST, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Headers' => 'X-Requested-With, Content-Type, Accept, Origin, token,Status Code'
]);
return $response;
}
}