# 执行记录 · 2026-06-09 · GHCS v0.2 API Keys 鉴权修复与本地验收

```jsx
HLDP://ghcs/v0.2/exec-log/2026-06-09 · 2026-06-09T00:56+08:00
├── scope: GHCS v0.2 · API Keys 管理
├── goal: keys 页面写操作不再 401；完成本地闭环验收
├── env: Mac 本地开发（frontend + backend）
└── result: ✅ 完成
```

---

## ✅ 今日完成清单（按验收口径）

- 后端已挂载 keys 路由：`GET /api/keys/suppliers` 返回 200
- 鉴权链路跑通：`POST /api/login` 返回 `access_token`（bearer）
- 写入验收：`POST /api/keys/add` 写入成功（示例 id：`41f67eb681f3`），mask 显示正确
- 读回验收：`GET /api/keys/list` 可读回刚写入的 key
- 前端页面 `/console/keys` 联调通过：suppliers/list/usage/health-check 200
- 关键修复：前端写操作（PUT/DELETE/POST）补齐 `Authorization: Bearer`，启停 `PUT /api/keys/{id}` 从 401 → 200

---

## 🔑 关键数据（防遗忘）

### 端口与环境变量

- backend：`http://127.0.0.1:5002`
- frontend：`http://localhost:3000`
- `frontend/.env.local`：`NEXT_PUBLIC_CONSOLE_API=http://127.0.0.1:5002`
    - ⊢ 改 env 必须重启 `npm run dev`

### token 规则

- `/api/login` 返回字段：`access_token`
- 前端存 token：`localStorage.ghcs_access_token`
- 写请求头：`Authorization: Bearer <access_token>`

### 本地默认账号（见 backend/[auth.py](http://auth.py)）

- `awen / guanghu2026`

---

## 🧠 交互产生的认知（可迁移）

- **页面 200 ≠ 链路通**：先用 `curl -i` 看 200/404，再谈 UI。
- **env 改了不重启 = 没改**：Next 必须重启才会吃新 `.env.local`。
- **读接口可放开，写接口必须鉴权**：前端所有写 fetch 必须统一带 Bearer。
- **用最小证据验收**：Network 里看 `PUT` 从 401→200 是“根治完成”的唯一判据。