隔离864与855登录态读取边界

- robot 仅对 legacy_855 继续兼容历史 config.toml

- server_864 运行时构建时主动清空 wxid、device_name、device_id,避免误用 855 残留状态

- 更新多版本适配路线图,记录 864 登录态硬隔离策略
This commit is contained in:
liuwei
2026-05-07 12:02:44 +08:00
parent b86588121a
commit b3f2c2c87c
2 changed files with 15 additions and 1 deletions

View File

@@ -30,6 +30,7 @@
- 已为 864 接入补充 `wechat_ipad.server_key` 统一配置项,支持通过 `.env``WECHAT_SERVER_KEY` 注入
- 已在 [wechat_ipad/gateway.py](/d:/learn/abot/wechat_ipad/gateway.py:1) 中注册 `server_864 / 864` 别名
- 已实现 864 第一版登录、初始化等待、HTTP 消息轮询、联系人、群信息、资料与朋友圈基础接口
- 已在 [robot.py](/d:/learn/abot/robot.py:1) 中为 864 增加登录态硬隔离,默认不再回读 855 的历史 `config.toml` 与动态字段
当前尚未完成的关键项:

View File

@@ -345,6 +345,7 @@ class Robot:
3. 最后兼容历史 `wechat_ipad/config.toml`,让老环境升级后可以平滑迁移。
"""
base_config = dict(getattr(self.config, "wechat_ipad", {}) or {})
normalized_provider_key = self._normalize_wechat_provider_key(base_config.get("server_type", "legacy_855"))
state_path = str(base_config.get("state_file", "") or self._default_wechat_state_path(base_config))
legacy_config_path = str(
base_config.get("legacy_config_path", "wechat_ipad/config.toml") or "wechat_ipad/config.toml"
@@ -352,7 +353,11 @@ class Robot:
state_config = self._load_toml_config_if_exists(state_path)
legacy_config = {}
if os.path.abspath(state_path) != os.path.abspath(legacy_config_path):
# 只有 855 家族继续兼容历史 `wechat_ipad/config.toml`
# 1. 用户当前明确担心 864 调试时误用本地 855 登录信息;
# 2. 864 的静态鉴权已经切到 `server_key`,不需要再借助旧 TOML 补状态;
# 3. 因此从这一层开始做硬隔离,避免 provider 切换时把 855 缓存带进 864 运行链路。
if normalized_provider_key == "legacy_855" and os.path.abspath(state_path) != os.path.abspath(legacy_config_path):
legacy_config = self._load_toml_config_if_exists(legacy_config_path)
merged_config = dict(base_config)
@@ -381,6 +386,14 @@ class Robot:
if legacy_value not in (None, ""):
merged_config[field_name] = legacy_value
# 对 864 这类新 provider进一步清理可能残留的 855 动态字段:
# 1. `wxid/device_name/device_id` 对 864 不是主鉴权参数;
# 2. 若用户历史上跑过 855本地 `.env` 或旧缓存里残留这些字段,最容易让人误以为“复用了旧号”;
# 3. 这里直接在构建运行时快照时清空,保证 864 启动只依赖 `server_key + 远端登录态`。
if normalized_provider_key != "legacy_855":
for field_name in ("wxid", "device_name", "device_id"):
merged_config[field_name] = ""
merged_config["state_file"] = state_path
merged_config["legacy_config_path"] = legacy_config_path
return merged_config