Files
Nexus/docs/changelog/2026-06-21-btpanel-login-auto-bootstrap.md
T
r 629d8b3e26 fix(btpanel): login-url 返回类型含 bool 导致全站 500
路由注解 dict[str,str] 与 bootstrapped 布尔字段冲突,FastAPI 响应校验失败。
2026-06-21 12:17:29 +08:00

1.5 KiB
Raw Blame History

宝塔一键登录:未配置时自动获取 API

日期2026-06-21

摘要

#/servers 与宝塔连接配置页的「一键登录」在未获取宝塔 API 时,会先通过 SSH bootstrap 写入 api.json,再生成临时登录链接;无需用户先点「获取 API」。

动机

行内一键登录应一步完成;此前未配置机器仅走 SSH 临时登录或需手动 bootstrap,与批量栏「选中获取 API」能力不一致。

涉及文件

  • server/application/services/btpanel_service.pycreate_login_url 未配置时 source=immediate bootstrap
  • frontend/src/composables/btpanel/useBtPanelLogin.ts — 未配置时顶部 snackbar 20s 倒计时(timeout: -1 持久显示)
  • frontend/src/App.vue — snackbar 支持自定义 timeout
  • frontend/src/api/btpanel.ts — 响应类型含 bootstrapped
  • frontend/src/pages/btpanel/BtPanelLoginPage.vue — 移除未配置拦截,bootstrap 后刷新列表
  • tests/test_btpanel_login_url.py

迁移 / 重启

无 schema 变更;需部署 API 与前端静态资源。

验证

pytest tests/test_btpanel_login_url.py -q
cd frontend && npx vite build

生产:对未配置宝塔 API 的子机点「一键登录」,应自动获取后打开面板;审计 bt_panel_login_url 的 detail 含 bootstrapped: true

2026-06-21 热修

  • 根因login-url 路由返回类型 dict[str, str],响应含 bootstrapped: bool → FastAPI 校验 500
  • 修复server/api/btpanel.py 改为 dict[str, Any]