Skip to content

修复禁用 Sub2API 后删除账号仍报 500 的问题#50

Merged
cnitlrt merged 1 commit into
cnitlrt:devfrom
ef4tless:dev
May 11, 2026
Merged

修复禁用 Sub2API 后删除账号仍报 500 的问题#50
cnitlrt merged 1 commit into
cnitlrt:devfrom
ef4tless:dev

Conversation

@ef4tless

Copy link
Copy Markdown

概述

修复仪表盘从 Team 移除账号时返回 500 Internal Server Error 的问题。

复现路径:用户在 .env 中显式设置 SYNC_TARGET_SUB2API=false,仅保留 SUB2API_URL/EMAIL/PASSWORD 的占位符值(.env.example 复制过来),点击删除账号 → 后端抛 JSONDecodeError: Expecting value: line 1 column 1 (char 0) → 本地账号也没清理掉。

根因

delete_account_from_configured_targets 删除时使用 include_disabled=True 以兼容"先关同步、再清理残留"的场景,走的是 get_available_sync_targets() 分支。

而原始的 get_available_sync_targets 只检查配置项是否非空,完全忽略了用户显式设置的 SYNC_TARGET_*=false 开关。因为 .env.example 里 SUB2API 三项有占位值(http://127.0.0.1:8080 / admin@example.com / your_password),仅复制过来就会让该函数判定 Sub2API "可用",于是删除流程仍会尝试 _login()

File "src/autoteam/sub2api_sync.py", line 79, in _request
    raise RuntimeError(f"[Sub2API] {label}返回了非 JSON 内容: {_excerpt(resp.text)}") from exc
RuntimeError: [Sub2API] 管理员登录返回了非 JSON 内容:

连接 127.0.0.1:8080 失败,响应体为空,JSON 解析炸开,异常一路冒到 FastAPI 变成 500,本地账号清理流程被中断。

修改

src/autoteam/sync_targets.py

  1. get_available_sync_targets 尊重显式 false toggle。如果用户写明 SYNC_TARGET_SUB2API=false,即使配置项有占位值也跳过该目标 —— 与 get_sync_target_states 的语义保持一致。toggle 未设置时仍按"配置齐全即可用"的旧行为处理,向后兼容。

  2. 远端清理调用全部 try/except 包裹delete_main_codex_from_configured_targets / delete_account_from_configured_targets 中每个远端目标的删除调用单独捕获异常,失败时记 WARNING 日志并在 results 中带 error 字段返回。这样即便将来配置正确但远端临时不可达(网络抖动、服务重启等),本地账号删除也不会再被阻塞。

Test plan

  • .envSYNC_TARGET_SUB2API=false + 占位符配置,仪表盘删除账号不再 500
  • .env 未设置 toggle 但配置齐全时 sub2api 仍在 available 列表(向后兼容)
  • SYNC_TARGET_SUB2API=true 时仍可正常调用远端
  • Sub2API 服务确实启用但不可达时,本地账号仍能删除,日志中能看到 [Sub2API] 删除账号 xxx 失败 的 warning

`get_available_sync_targets` 之前只看配置项是否非空,忽略了用户显式
设置的 `SYNC_TARGET_*=false` 开关。结果是用户把 Sub2API 关掉但 .env
里残留占位符配置时,删除账号仍会尝试调用 Sub2API,连接失败抛 500
导致本地账号也清理不掉。

- 显式 false 的 toggle 在 include_disabled 路径下也要被尊重
- 远端清理调用包 try/except,单个目标失败不再阻断本地删除

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@cnitlrt cnitlrt merged commit 621609f into cnitlrt:dev May 11, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants