63 lines
2.4 KiB
Markdown
63 lines
2.4 KiB
Markdown
|
|
# 执行记录 · 2026-06-11 · GHCS v0.2 登录入口闭环验收(本地)
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
HLDP://ghcs/v0.2/exec-log/2026-06-11 · 2026-06-11T00:48+08:00
|
|||
|
|
├── scope: GHCS v0.2 · API Keys 登录入口产品化 + 本地验收闭环(不部署服务器)
|
|||
|
|
├── env: Mac 本地开发(frontend:3000 + backend:5002)
|
|||
|
|
├── policy: 未完全开发完不部署服务器(本次严格遵守)
|
|||
|
|
└── result: ✅ 本地闭环通过
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ 本次完成清单(按验收口径)
|
|||
|
|
|
|||
|
|
### 1) 登录入口(可点可用)
|
|||
|
|
|
|||
|
|
- 页面:`/console/keys` 顶部登录条显示
|
|||
|
|
- 登录接口:`POST /api/login` → 返回 `access_token`(bearer)
|
|||
|
|
- 本地持久化:`localStorage.ghcs_access_token` 有值(刷新不丢)
|
|||
|
|
|
|||
|
|
### 2) 写操作鉴权闭环(不再 401)
|
|||
|
|
|
|||
|
|
- 启停开关:触发 `PUT /api/keys/{id}` → 200
|
|||
|
|
- Network 验收:请求头包含 `Authorization: Bearer <token>`
|
|||
|
|
- 实际效果:key 的启用/停用状态可切换并生效
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧱 本次遇到的问题(根因)
|
|||
|
|
|
|||
|
|
1) **前端编译错误:TSX 的 style 写法错**
|
|||
|
|
|
|||
|
|
- 典型错误:`style= color: ...` / `style= backgroundColor: ...`
|
|||
|
|
- 结果:Next 直接 build error(Expected '</', got 'ident')
|
|||
|
|
|
|||
|
|
2) **富文本/渲染吞双花括号**
|
|||
|
|
|
|||
|
|
- 在聊天/Notion 中书写 `style= ...` 容易被吞成“少一层花括号”,导致反复改错
|
|||
|
|
- 结论:对话与文档中统一使用 `style={ { ... } }` 展示代码(永不丢花括号)
|
|||
|
|
|
|||
|
|
3) **token 失效导致 401(令牌过期或无效)**
|
|||
|
|
|
|||
|
|
- 现象:localStorage 有 token,但写请求 401
|
|||
|
|
- 处理:清空旧 token → 重新登录签发 → 再验收 PUT 200
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧠 认知沉淀(以后怎么避免绕圈)
|
|||
|
|
|
|||
|
|
- **硬规则 1:TSX 里看到 `style=` 就立即检查是否是对象形式**
|
|||
|
|
- 禁用:`style= color:` / `style= backgroundColor:`
|
|||
|
|
- 允许:`style= ...` 或 `style={ { ... } }`
|
|||
|
|
- **硬规则 2:代码只在 VS Code 改;对话只传证据链**
|
|||
|
|
- 证据链最小集:localStorage token 有值 + Network PUT 200 + Bearer header 存在
|
|||
|
|
- **硬规则 3:401 先走 SOP,不猜**
|
|||
|
|
- token 是否存在 → header 是否带 Bearer → response detail → 再决定清 token 还是修代码
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📌 当前状态
|
|||
|
|
|
|||
|
|
- GHCS v0.2 · API Keys 登录入口 + 写操作鉴权:**本地验收✅**
|
|||
|
|
- 下一步(仍保持本地优先):全局 fetch 封装(自动带 Bearer + 统一 401 提示)
|