Files
digital-psychology/.ai/product/feature-spec/account-auth.md
T
jackyu66gitandCursor 5ceb3ce749
ci / h5 (push) Canceled after 0s
ci / api (push) Canceled after 0s
ci / ess-docs (push) Canceled after 0s
feat(ECR-010): Ops-E 系统运营;修复登出解绑;P2 Complete
落地管理员 RBAC/封禁/推送任务 stub,logout 解绑 device 并统一各页 ensureAccount,同时收口 P2 生日生成与状态文档。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 18:54:59 +08:00

137 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Feature Spec: 账号登录
> Status: `Active` · Map: `5.x 账号 [P1+]` · Phase: `P1`
> 规范:[../feature-design.md](../feature-design.md)
> 关联:[profile-bootstrap.md](profile-bootstrap.md)
---
## 1. 功能定义
| 字段 | 内容 |
|---|---|
| Name | 账号登录(手机号+密码) |
| Purpose | 跨设备持久用户身份;未登录不可生成/查看生日衍生结果 |
| Business Goal | 数据归属清晰;为会员与深度版付费打底 |
| In | Out |
|---|---|
| 注册 / 登录 / 登出 / me | 微信 OAuth、短信 OTP(后续) |
| 设备身份绑定到已注册账号 | 游客可看完整报告 |
| Bearer Session | 运营 Admin 登录(独立) |
---
## 2. 用户价值
1. 换手机后仍能看到自己的档案与报告。
2. 登录后输入生日一次生成、各页直读。
3. N/A(登录本身免费)。
---
## 3. 用户角色
| Actor | 能力 |
|---|---|
| Visitor | 仅设备身份;可打开登录页;**不可**建档出结果 |
| User(已注册) | CRUD 本人档案与 TA;读已生成报告 |
| VIP / DeepAccess | 同前,权益不变 |
---
## 4. 用户流程
```text
进入结果页或建档
未登录? → /login 注册或登录
Device 绑定到账号 User
进入档案 / 结果页(读缓存报告)
```
---
## 5. 页面设计
| 路由 | 页面 |
|---|---|
| `/login` | LoginPage(注册/登录切换) |
| `/mine` | 展示账号手机号尾号 + 退出 |
---
## 6. 页面状态规范
| 状态 | UI |
|---|---|
| Loading | 登录中 |
| Error | 密码错误 / 手机号已注册 |
| Normal | 跳转 redirect 或 /mine |
---
## 7. Business Rules
| ID | Rule |
|---|---|
| R1 | **临时开放:** 任意非空手机号 + 任意密码均可登录;未注册则自动建号写入 DB |
| R2 | 登录/注册统一走 OpenLogin;不校验历史密码,仍会更新 password_hash 记录本次输入 |
| R3 | 登录成功后:签发 sessiondevice_identities.user_id 改绑到账号 |
| R4 | 生成/查看档案与报告 API 必须已注册(users.phone 非空)且有效 session 或已绑设备账号 |
| R5 | 登出作废 session;设备可再登录其他账号 |
| R6 | 正式环境恢复校验前须改回本 Spec |
---
## 8. 数据模型影响
- `users.phone` UNIQUE · `users.password_hash` · `users.nickname`
- `user_sessions(token, user_id, expires_at)`
---
## 9. API 需求
| Method | Path | 说明 |
|---|---|---|
| POST | `/api/v1/auth/register` | 注册 |
| POST | `/api/v1/auth/login` | 登录 |
| POST | `/api/v1/auth/logout` | 登出 |
| GET | `/api/v1/auth/me` | 当前账号 |
---
## 10. 权限设计
| 能力 | Visitor | User |
|---|---|---|
| register/login | ✓ | ✓ |
| profiles / reports 写读 | ✗ | ✓ |
---
## 11. 埋点
`auth_register` · `auth_login` · `auth_logout`
---
## 12. 测试验收标准
| Given | When | Then |
|---|---|---|
| 新设备 | 未登录 POST portrait | 401 |
| 注册成功 | 建档 | 200 且生成报告包 |
| 登录另一设备 | list profiles | 见同一账号数据 |
| 已登录设备 | POST logout 后无 Bearer 再 GET /auth/me | 401(设备已解绑,刷新不再显示登录态) |
---
## 13. AI 开发前检查
- [x] lexicon:登录/注册/账号
- [x] 不碰 Admin Auth