优先获取认证 Token,必要时回退匿名会话池。
(
self,
excluded_tokens: Optional[Set[str]] = None,
excluded_guest_user_ids: Optional[Set[str]] = None,
)
| 1123 | } |
| 1124 | |
| 1125 | async def get_auth_info( |
| 1126 | self, |
| 1127 | excluded_tokens: Optional[Set[str]] = None, |
| 1128 | excluded_guest_user_ids: Optional[Set[str]] = None, |
| 1129 | ) -> Dict[str, Any]: |
| 1130 | """优先获取认证 Token,必要时回退匿名会话池。""" |
| 1131 | token_pool = get_token_pool() |
| 1132 | if token_pool: |
| 1133 | token = token_pool.get_next_token(exclude_tokens=excluded_tokens) |
| 1134 | if token: |
| 1135 | user_id = _extract_user_id_from_token(token) |
| 1136 | self.logger.debug(f"从认证号池获取令牌: {token[:20]}...") |
| 1137 | return { |
| 1138 | "token": token, |
| 1139 | "user_id": user_id, |
| 1140 | "username": "User", |
| 1141 | "auth_mode": "authenticated", |
| 1142 | "token_source": "auth_pool", |
| 1143 | "guest_user_id": None, |
| 1144 | } |
| 1145 | |
| 1146 | if settings.ANONYMOUS_MODE: |
| 1147 | guest_pool = get_guest_session_pool() |
| 1148 | if guest_pool: |
| 1149 | try: |
| 1150 | session = await guest_pool.acquire( |
| 1151 | exclude_user_ids=excluded_guest_user_ids |
| 1152 | ) |
| 1153 | self.logger.info( |
| 1154 | "🫥 认证池不可用,回退匿名会话池: " |
| 1155 | f"user_id={session.user_id}" |
| 1156 | ) |
| 1157 | return { |
| 1158 | "token": session.token, |
| 1159 | "user_id": session.user_id, |
| 1160 | "username": session.username, |
| 1161 | "auth_mode": "guest", |
| 1162 | "token_source": "guest_pool", |
| 1163 | "guest_user_id": session.user_id, |
| 1164 | } |
| 1165 | except Exception as exc: |
| 1166 | self.logger.warning(f"匿名会话池获取失败,转为直连访客鉴权: {exc}") |
| 1167 | |
| 1168 | return await self._fetch_direct_guest_auth() |
| 1169 | |
| 1170 | self.logger.error("❌ 无法获取有效的上游令牌") |
| 1171 | return { |
| 1172 | "token": "", |
| 1173 | "user_id": "", |
| 1174 | "username": "", |
| 1175 | "auth_mode": "authenticated", |
| 1176 | "token_source": "none", |
| 1177 | "guest_user_id": None, |
| 1178 | } |
| 1179 | |
| 1180 | async def mark_token_failure(self, token: str, error: Exception = None): |
| 1181 | """标记token使用失败""" |