|
|
@@ -58,9 +58,9 @@ const PLATFORM_API_CONFIG: Record<string, {
|
|
|
// 必须有用户信息(name 或 app_id)
|
|
|
const hasUserInfo = !!(resp?.data?.user?.name || resp?.data?.user?.app_id);
|
|
|
|
|
|
- // 用户状态不能是 'banned' 或其他异常状态
|
|
|
+ // 用户状态不能是 'banned' 或其他异常状态(兼容 normal 等常见正常状态)
|
|
|
const userStatus = resp?.data?.user?.status;
|
|
|
- const isStatusOk = !userStatus || userStatus === 'audit' || userStatus === 'pass' || userStatus === 'active';
|
|
|
+ const isStatusOk = !userStatus || ['audit', 'pass', 'active', 'normal'].includes(String(userStatus));
|
|
|
|
|
|
const isValid = isErrnoOk && hasUserInfo && isStatusOk;
|
|
|
|
|
|
@@ -268,26 +268,24 @@ class HeadlessBrowserService {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- // 百家号特殊处理:根据 errno 判断
|
|
|
+ // 百家号特殊处理:API 用 Node fetch 调用时可能因分散认证等返回 errno !== 0,但 Cookie 在浏览器内仍有效
|
|
|
+ // 因此当 API 判为无效时,回退到浏览器检查,避免“能登录后台却显示过期”
|
|
|
if (platform === 'baijiahao') {
|
|
|
const errno = (data as { errno?: number })?.errno;
|
|
|
|
|
|
- // errno 为 0 表示请求成功,但可能没有用户信息(已在 isValidResponse 中检查)
|
|
|
- if (errno === 0) {
|
|
|
- // 如果 isValid 为 false,说明虽然请求成功但没有用户信息,可能是 Cookie 无效
|
|
|
- if (!isValid) {
|
|
|
- logger.warn(`[API] Baijiahao errno=0 but no user info, cookie may be invalid`);
|
|
|
- return false;
|
|
|
- }
|
|
|
- return true;
|
|
|
+ if (errno === 0 && isValid) return true;
|
|
|
+ if (errno === 0 && !isValid) {
|
|
|
+ logger.warn(`[API] Baijiahao errno=0 but no user info, falling back to browser check`);
|
|
|
+ return this.checkCookieValidByBrowser(platform, cookies);
|
|
|
}
|
|
|
|
|
|
- // errno 非 0 表示请求失败,可能是 Cookie 无效
|
|
|
- // 常见错误码:
|
|
|
- // - 110: 未登录
|
|
|
- // - 其他非 0 值:可能是权限问题或其他错误
|
|
|
- logger.warn(`[API] Baijiahao errno=${errno}, cookie is invalid`);
|
|
|
- return false;
|
|
|
+ // errno 110 通常表示未登录,可直接判无效;其他 errno(如 10001402 分散认证)可能只是接口限制,用浏览器再判一次
|
|
|
+ if (errno === 110) {
|
|
|
+ logger.warn(`[API] Baijiahao errno=110 (not logged in), cookie invalid`);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ logger.info(`[API] Baijiahao errno=${errno}, falling back to browser check (may be dispersed auth)`);
|
|
|
+ return this.checkCookieValidByBrowser(platform, cookies);
|
|
|
}
|
|
|
|
|
|
// 不确定的状态(如 status_code=7),回退到浏览器检查
|