1.5 KiB
1.5 KiB
2026-06-01 Bug Remediation — 设计说明
背景与目标
交接文件第八节与 2026-06-01 审查列出 P0~P3 共 16 项缺陷。本次一次性根治,不降级、不留 TODO。
方案摘要
| 领域 | 选定方案 | 理由 |
|---|---|---|
| 批量选择 | normalizeServerIds() 兼容 Vuetify item-value 返回 ID 或对象 |
根因明确,最小改动 |
| Access Token | 60 分钟 + HttpOnly Refresh 30 天(Redis Set) | 行业标准;Refresh 已实现 |
| SPA 认证 | credentials: 'include' + 401 单次 refresh 重试;access 仅存内存 |
对齐后端 Cookie,降 XSS 面 |
| script-callback | 强制 X-API-Key + per-server 校验;curl 包装带 Header |
与 heartbeat 一致 |
| 心跳 MySQL | 移除实时 update_heartbeat;仅 heartbeat_flush 刷库 |
与 ADR 数据流一致 |
| 未知 server_id | 200 discarded |
避免 422 噪音与重试风暴 |
| Admin 废弃列 | ORM 移除 + 启动迁移 DROP(若存在) | Redis 已承载 refresh |
安全约束
- API Key / SECRET_KEY 不入前端
- curl 中 API Key 用
shlex.quote - 422 日志保留但不对 discarded 路径刷 ERROR
验收标准
- ServersPage 批量安装/升级/卸载返回正确 success 计数
- Access JWT
exp约 60 分钟;Refresh Cookie 仍可续期 - 无 server_id / 未知 server_id 心跳 → 200 discarded
- script-callback 无 Key → 401
pytest tests/test_api.py可收集(无模块级 sys.exit)ruff check server/零错误