path(), '/console/') !== 0) { return $handler($request); } // 通过反射获取控制器哪些方法不需要登录 $controller = new ReflectionClass($request->controller); $noNeedLogin = $controller->getDefaultProperties()['noNeedJwt'] ?? []; $isLogin = !in_array($request->action, $noNeedLogin); // 从 Header 获取 Token $token = $request->header('Authorization'); //需要登录并且未提供token $body = [ 'status' => 'error', 'code' => 401, 'message' => 'Please log in.', 'data' => [], ]; if ($isLogin && (!$token || !str_starts_with($token, 'Bearer '))) { return response(json_encode($body, JSON_UNESCAPED_UNICODE), 401, ['Content-Type' => 'application/json']); }elseif(!$isLogin){ return $handler($request); } $token = substr($token, 7); try { // 验证 Token 并获取用户ID $decoded = JwtUtil::verifyToken($token); if (!isset($decoded->sub)) { return response(json_encode($body, JSON_UNESCAPED_UNICODE), 401, ['Content-Type' => 'application/json']); } $userId = $decoded->sub; $user = AdminsModel::find($userId); if(!$user){ return response(json_encode($body, JSON_UNESCAPED_UNICODE), 401, ['Content-Type' => 'application/json']); } // 将用户ID存入请求对象,供后续使用 $request->user = $user; return $handler($request); } catch (BusinessException $e) { return json(['code' => 401, 'msg' => $e->getMessage()]); } } }