收紧864无可用账号身份时的登录放行
This commit is contained in:
@@ -146,7 +146,9 @@ class Server864RuntimeMixin:
|
||||
) -> None:
|
||||
"""确保 864 已完成登录。"""
|
||||
if await self.is_logged_in():
|
||||
await self._refresh_identity_from_profile(logger=logger)
|
||||
identity_ready = await self._refresh_identity_from_profile(logger=logger)
|
||||
if not identity_ready:
|
||||
raise RuntimeError("当前未拿到可用账号身份,请重新扫码登录")
|
||||
# 864 在“服务端已经在线、ABOT 只是后启动”的场景下会直接走这里:
|
||||
# 1. 之前这条分支只清理二维码态,没有补写本地 runtime_state;
|
||||
# 2. 这会让用户误以为“明明已经登录成功,却没有生成 provider 状态文件”;
|
||||
@@ -383,7 +385,9 @@ class Server864RuntimeMixin:
|
||||
|
||||
try:
|
||||
await self._wait_init_ready(logger=logger)
|
||||
await self._refresh_identity_from_profile(logger=logger)
|
||||
identity_ready = await self._refresh_identity_from_profile(logger=logger)
|
||||
if not identity_ready:
|
||||
raise RuntimeError("扫码完成后未获取到可用账号身份,请重新扫码登录")
|
||||
ipad_config["wxid"] = self.wxid
|
||||
ipad_config["login_time"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
|
||||
self._save_runtime_state(
|
||||
@@ -495,7 +499,7 @@ class Server864RuntimeMixin:
|
||||
logger.warning(f"server_864 检查初始化状态失败: {error_message}")
|
||||
await asyncio.sleep(2)
|
||||
|
||||
async def _refresh_identity_from_profile(self, *, logger) -> None:
|
||||
async def _refresh_identity_from_profile(self, *, logger) -> bool:
|
||||
"""从 864 的资料接口刷新当前登录身份。"""
|
||||
try:
|
||||
profile = await self.get_profile()
|
||||
@@ -503,10 +507,13 @@ class Server864RuntimeMixin:
|
||||
error_message = str(e).strip()
|
||||
# 864 有些版本在消息链路可用后,资料接口仍可能短时间不可用:
|
||||
# 1. 此时若直接抛异常,会让“已经登录成功”的启动流程被资料查询反向拖垮;
|
||||
# 2. 项目主链路真正依赖的是后续消息同步与发送能力,而不是这里的展示性资料;
|
||||
# 3. 所以这里改成降级告警,保留已有身份字段,等后续再由可用接口补齐。
|
||||
logger.warning(f"server_864 刷新登录账号资料失败,继续沿用当前缓存身份: {error_message}")
|
||||
return
|
||||
# 2. 但如果当前连 `wxid/nickname` 都没有,就不能再假装“已经有可用身份”;
|
||||
# 3. 因此这里返回布尔值,由上层决定是继续使用已知身份,还是把登录流程判定为失败。
|
||||
if self.wxid or self.nickname:
|
||||
logger.warning(f"server_864 刷新登录账号资料失败,继续沿用当前已获取身份: {error_message}")
|
||||
return True
|
||||
logger.warning(f"server_864 刷新登录账号资料失败,当前尚未拿到可用账号身份: {error_message}")
|
||||
return False
|
||||
self.wxid = str(
|
||||
profile.get("UserName")
|
||||
or profile.get("userName")
|
||||
@@ -530,6 +537,7 @@ class Server864RuntimeMixin:
|
||||
logger.info(
|
||||
f"server_864 登录账号信息: wxid: {self.wxid} 昵称: {self.nickname} 微信号: {self.alias} 手机号: {self.phone}"
|
||||
)
|
||||
return bool(self.wxid or self.nickname)
|
||||
|
||||
@staticmethod
|
||||
def _save_runtime_state(*, state_path: str, state_payload: dict[str, Any], logger) -> None:
|
||||
|
||||
Reference in New Issue
Block a user