feat: 实现端自助注册 HTTP 接口与 F23 验收测试
This commit is contained in:
+36
-1
@@ -310,7 +310,42 @@
|
||||
|
||||
## 身份 I
|
||||
|
||||
暂无。
|
||||
### I1 2026-09-30
|
||||
|
||||
1. **注册做成可挂载 Handler,不改 cmd/listener**
|
||||
- 原条款:TASKS I1 / DEVELOPMENT 6.9 在 `listen` 上提供 `POST /api/client/register`;依赖 N1 端口识别。
|
||||
- 实际做法:`identity.NewRegisterHandler` / `identity.NewServer().Handler()` 返回 `http.Handler`,由接线方 `mux.Handle("/api/client/register", h)`;本线不改 `cmd/nixmsg`、`internal/listener`(N 线未合入)。
|
||||
- 原因:隔离交付,避免抢 N/P 接线。
|
||||
- 备选方案:本线直接改 `wire.go` 挂路由。
|
||||
- 影响:合入后需总控或 N/A 接线才对外可访问。
|
||||
|
||||
2. **密码哈希与锁定走 auth 接口,本分支用可替换假实现测**
|
||||
- 原条款:依赖 P3 argon2 池与锁定计数器。
|
||||
- 实际做法:`RegisterConfig.Hash`/`Locks` 注入 `auth.HashPool`、`auth.LoginLocks`;测试用 `auth.NewStubHashPool` + 仅实现 `LockRegisterIP`(5 分钟 10 次)的测试锁定器,不在本线重写 argon2。
|
||||
- 原因:P3 尚未在本分支。
|
||||
- 备选方案:等 P3 合入后再写 I1。
|
||||
- 影响:生产须注入 P3 实现;StubLoginLocks 永不锁定,不能直接用于开放注册。
|
||||
|
||||
3. **settings 开关取值**
|
||||
- 原条款:`settings.registration_enabled`,未规定字符串字面量。
|
||||
- 实际做法:`1`/`true`/`yes`/`on`(大小写不敏感)视为开启,其余(含缺省)关闭;安全码键 `registration_code`。
|
||||
- 原因:与 store 测试写入的 `"0"`/`"1"` 对齐并兼容常见布尔字面量。
|
||||
- 备选方案:仅认 `"1"`。
|
||||
- 影响:A 线写注册设置时宜写 `"1"`/`"0"`。
|
||||
|
||||
4. **客户端 IP**
|
||||
- 原条款:DEVELOPMENT 4.5 受信任代理下用 `X-Forwarded-For`。
|
||||
- 实际做法:Handler 默认取 `RemoteAddr` 的 host;可通过 `RegisterConfig.ClientIP` 注入。本线不做 `trusted_proxies` 解析(属 listener/接线)。
|
||||
- 原因:不改 listener;代理 IP 应由外层在挂载前算好或注入。
|
||||
- 备选方案:在 identity 内复制 4.5 逻辑。
|
||||
- 影响:经代理部署时接线方必须注入真实 IP,否则锁定按直连 IP 计。
|
||||
|
||||
5. **生成登录密码长度**
|
||||
- 原条款:F01 留空则生成,8–128 字符,不以 `nst_` 开头;未规定生成长度。
|
||||
- 实际做法:生成 20 位字母数字;若偶然以 `nst_` 开头则重抽。
|
||||
- 原因:与管理员 init 量级接近,满足规则。
|
||||
- 备选方案:16/32 位。
|
||||
- 影响:无产品行为差异。
|
||||
|
||||
## 后台接口 A
|
||||
|
||||
|
||||
Reference in New Issue
Block a user