# 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 | 登录成功后:签发 session;device_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 | 见同一账号数据 | --- ## 13. AI 开发前检查 - [x] lexicon:登录/注册/账号 - [x] 不碰 Admin Auth