container = $container; $this->cache = $cache; } /** * 登录状态校验 * @param ServerRequestInterface $request * @param RequestHandlerInterface $handler * @return ResponseInterface */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $container = ApplicationContext::getContainer(); // 管理端 和 商户端 $request = $request->withAttribute("isLogin", false); $request = $request->withAttribute("account", []); $request = $request->withAttribute("account_id", 0); try { $token = $request->getHeaderLine("Authorization", ""); $result = Token::parseToken(str_replace("Bearer ", "", $token)); if (!empty($result)) { $user = $this->cache->get("USER:" . $result['uuid']); if (!empty($user)) { $account = json_decode($user, true); } } // 判断登录状态是否强退 if (!empty($account)) { // 是否登录 $request = $request->withAttribute("isLogin", true); $account = json_decode($this->cache->get("USER:" . $result['uuid']), true); // 账号ID $request = $request->withAttribute("account_id", $account['account_id']); // 基础信息 $request = $request->withAttribute("account", $account); // 如果账户离线恢复在线 Online::reLive($result['uuid']); } } catch (\Exception $exception) { } Context::set(ServerRequestInterface::class, $request); $response = $handler->handle($request); // 续签逻辑 if (!empty($result) && $result['time'] - time() < 600 && !empty($account)) { $newToken = Token::buildToken(['uuid' => $result['uuid'], 'time' => time() + config("jwt.ttl")], config("jwt.ttl")); $response = $response->withHeader('X-Token-Refresh', $newToken); $response = $response->withHeader('X-Token-Expire', config("jwt.ttl")); $this->cache->set("USER:" . $result['uuid'], json_encode($account), config("jwt.ttl")); } return $response; } }