629d8b3e26
路由注解 dict[str,str] 与 bootstrapped 布尔字段冲突,FastAPI 响应校验失败。
1.5 KiB
1.5 KiB
宝塔一键登录:未配置时自动获取 API
日期:2026-06-21
摘要
#/servers 与宝塔连接配置页的「一键登录」在未获取宝塔 API 时,会先通过 SSH bootstrap 写入 api.json,再生成临时登录链接;无需用户先点「获取 API」。
动机
行内一键登录应一步完成;此前未配置机器仅走 SSH 临时登录或需手动 bootstrap,与批量栏「选中获取 API」能力不一致。
涉及文件
server/application/services/btpanel_service.py—create_login_url未配置时source=immediatebootstrapfrontend/src/composables/btpanel/useBtPanelLogin.ts— 未配置时顶部 snackbar 20s 倒计时(timeout: -1持久显示)frontend/src/App.vue— snackbar 支持自定义timeoutfrontend/src/api/btpanel.ts— 响应类型含bootstrappedfrontend/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]