diff --git a/app/Controller/UserController.php b/app/Controller/UserController.php index 4ffaa82..4576bef 100644 --- a/app/Controller/UserController.php +++ b/app/Controller/UserController.php @@ -52,4 +52,17 @@ class UserController extends AbstractController $data = $UserService->putUserName(); return $this->response->json($data); } + + /** + * 退出登陆 + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function putLoginout(): ResponseInterface + { + $UserService = new UserService(); + $data = $UserService->putLoginout(); + return $this->response->json($data); + } } \ No newline at end of file diff --git a/app/Services/UserService.php b/app/Services/UserService.php index ec28174..e27bb71 100644 --- a/app/Services/UserService.php +++ b/app/Services/UserService.php @@ -13,6 +13,7 @@ use App\Utils\PcreMatch; use Extend\Wechat\Wechat; use Hyperf\Amqp\Result; use Hyperf\DbConnection\Db; +use Hyperf\Redis\Redis; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface; @@ -203,6 +204,42 @@ class UserService extends BaseService return success(); } + /** + * 退出登陆 + * @return array + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function putLoginout(){ + $user_info = $this->request->getAttribute("userInfo") ?? []; + + // 获取用户信息 + $params = array(); + $params['user_id'] = $user_info['user_id']; + $user = User::getOne($params); + if (empty($user)){ + return fail(); + } + + // 获取token + $bearer_token = $this->request->getHeader('Authorization'); + if (empty($bearer_token)){ + return fail(); + } + + $token = explode(' ', $bearer_token[0]); + + $redis = $this->container->get(Redis::class); + + // 旧token加入黑名单 5天有效期,5天内,无法继续进行访问 + $res = $redis->set('jwt_black_' . $token, time(), 60*60*24*5); + if (!$res) { + return fail(HttpEnumCode::SERVER_ERROR); + } + + return success(); + } + /** * 通过user_id获取用户openid * @param string|int $user_id diff --git a/config/routes.php b/config/routes.php index 9192d42..6f303c3 100644 --- a/config/routes.php +++ b/config/routes.php @@ -348,4 +348,7 @@ Router::addGroup('/user', function () { // 修改用户名 Router::put('/name', [UserController::class, 'putUserName']); + + // 退出登陆 + Router::put('/loginout', [UserController::class, 'putLoginout']); }); \ No newline at end of file