Files
conti-docs/prd/modules/01-LGN-账号登录.md
T

221 lines
14 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.
# 4.1 账号登录
> **本文件是【账号登录 LGN】模块需求的编辑入口。**
> 主文件 [`../Continental-Retail-APP-PRD.md`](../Continental-Retail-APP-PRD.md) 第 4.1 节已于 2026-08 从本文件回灌(V1.1),此后的需求变更仍改本文件、再回灌。
> **两者不一致时以本文件为准。** 目录约定见 [`README.md`](./README.md)。
| 项 | 值 |
| --- | --- |
| 模块码 | LGN |
| V1.0 章节 | 4.1 |
| 描述粒度 | 14 维完整模板 |
| 需求依据 | 业务需求 + 设计稿 |
| 现状承载系统 | O2O 接单宝后台(用户主数据) |
| 需求条数 | 10(待确认 7,完成度 30%) |
| 配图 | 1 张(设计稿 1) |
模块概要
---
一套账号切换多家门店,账号统一管理、员工权限配置。
![设计稿-登录页](../app-design-images/登录.png)
**页面内容** —— App 登录页目标形态:深色轮胎背景 + 橙色徽标,中部为手机号 / 验证码登录区与「密码登录」「我要注册」两个次级入口,下方是第三方登录(微信、支付宝)与协议勾选行。
**关键交互** —— ①输入手机号 → 点「获取验证码」,60 秒内不可重复获取([REQ-LGN-001](#412-业务规则));②点「密码登录」→ 切换为用户名 + 密码模式;③点「我要注册」→ 进入注册流程(表单与审核流程未定 `TODO(REQ-LGN-004)`);④点微信 / 支付宝 → 第三方授权,首次需绑定已有手机号账号(`TODO(REQ-LGN-003)` 是否纳入本期);⑤点《用户协议》/《隐私政策》→ 查看全文;⑥勾选协议后「登录」方可提交。
**可用角色** —— 店长 ✅、技工 ✅,登录环节两个角色完全一致;差异从登录成功后的角色化导航开始(见[导航收敛与角色化配置](./02-HOM-APP首页与导航.md#425-导航收敛与角色化配置))。第三方登录与注册两项对两个角色均为 ❓ `TODO(REQ-LGN-003)` / `TODO(REQ-LGN-004)`
**需求关联** —— [REQ-LGN-001](#412-业务规则) 验证码登录、[REQ-LGN-002](#412-业务规则) 密码登录、[REQ-LGN-003](#412-业务规则) 第三方登录、[REQ-LGN-004](#412-业务规则) 注册与审核、[REQ-LGN-005](#412-业务规则) 协议展示与留痕
> **本图与验收标准的两处对不上,需设计补稿**(不新增需求,属设计稿状态缺失):
>
> 1. 稿中协议勾选框为**未勾选**态,而「登录」按钮画的是完整橙色实心(非置灰)。[验收标准第 1 条](#416-验收标准)要求未勾选时按钮为禁用态 —— **设计稿未画禁用态**。
> 2. 稿中**未见「忘记密码」入口**,而 [REQ-LGN-006](#412-业务规则) 规定忘记密码经手机号验证码重置。该入口可能在「密码登录」模式下才出现,但**密码登录态的稿未提供**,本图无法确认。
## 4.1.1 需求描述
**业务目标** —— 用一套账号替代 6 套小程序各自的登录,消除重复登录;同时建立可审核、可回收的账号管控机制,解决[痛点 2.2](../Continental-Retail-APP-PRD.md#22-账号权限管控)
**目标角色** —— 店长、技工
**入口** —— APP 冷启动且无有效会话;会话失效后的任意页面被动跳转
**前置条件** —— 账号已在 O2O 接单宝后台存在并通过审核;设备可访问网络
**页面内容**
- 品牌背景 + Continental Logo
- 手机号输入框
- 验证码输入框 + 「获取验证码」
- 「登录」主按钮
- 「密码登录」次按钮(切换到用户名 + 密码模式)
- 「我要注册」文字入口
- 第三方登录区(微信、支付宝)
- 底部协议勾选「已阅读并同意《用户协议》与《隐私政策》」
**主流程**
1. 输入手机号
2. 获取验证码
3. 输入验证码
4. 勾选协议
5. 点击登录
6. 后端校验通过下发 access / refresh token
7. 拉取该账号的门店列表与角色
8. 单门店直接进入首页;多门店弹出门店选择
9. 进入 APP 首页
**异常流程**
- 手机号未注册 → 提示并引导「我要注册」
- 验证码错误 → 提示剩余可试次数
- 验证码超时 → 提示重新获取
- 未勾选协议 → 登录按钮不可用
- 账号被停用 → 提示联系门店管理员
- 账号无任何门店归属 → 阻断登录并提示
- 网络异常 → 保留已输入内容并允许重试
**业务规则** —— 见 [4.1.2](#412-业务规则)
**权限规则** —— 登录本身不区分角色;登录成功后由后端下发角色(店长 / 技工)与该角色的可见 tab 集合、功能权限,见[导航收敛与角色化配置](./02-HOM-APP首页与导航.md#425-导航收敛与角色化配置)与[附录 B](../Continental-Retail-APP-PRD.md#附录-b-权限矩阵)
**访问链路** —— App → App Backend → O2O 后台(用户主数据校验);App Backend → 短信网关(验证码下发);App Backend → 马上下单(门店列表)
**逻辑数据来源** —— 用户主数据:**O2O 接单宝后台**(手机号、用户名、密码、角色);门店列表:马上下单;协议内容:APP 后台管理 Web
**回写目标** —— 登录日志、设备信息写入 App Backend;协议同意记录(版本号 + 时间戳)写入 App Backend
**状态变化** —— 无会话 → 已登录(持有 access/refresh token)→ 已选定门店上下文
**验收标准** —— 见 [4.1.6](#416-验收标准)
## 4.1.2 业务规则
**REQ-LGN-001 手机号验证码登录** —— 手机号为 11 位中国大陆号码;验证码 6 位数字,有效期 5 分钟;同一手机号 60 秒内只能获取一次;单日获取上限 `TODO(REQ-LGN-001)`
**REQ-LGN-002 用户名密码登录** —— 用户名与密码沿用 O2O 注册时设置的凭据;密码在传输与存储全程不可逆
**REQ-LGN-003 第三方登录** —— 支持微信、支付宝授权登录。首次授权需绑定已有手机号账号后方可进入;未绑定账号不允许直接创建新账号。
> ⚠️ 该需求仅见于设计稿 —— `TODO(REQ-LGN-003)` 需确认是否纳入本期
**REQ-LGN-004 注册与审核** —— 设计稿含「我要注册」入口。注册后账号处于「待审核」状态,需门店店长或后台管理员审核通过方可登录,以解决[痛点 2.2](../Continental-Retail-APP-PRD.md#22-账号权限管控) 的「随意注册」问题。
> ⚠️ 注册表单字段、审核人、审核时效均未定义 —— `TODO(REQ-LGN-004)`
**REQ-LGN-005 协议展示与留痕** —— 用户协议、隐私政策内容由后台管理 Web 维护,经法务审核;用户点击可查看全文;同意时记录协议版本号与同意时间;协议版本更新后需重新征得同意
**REQ-LGN-006 密码策略** —— 密码长度、复杂度、有效期、历史密码不可复用条数 —— `TODO(REQ-LGN-006)`。忘记密码通过手机号验证码重置
**REQ-LGN-007 登录失败锁定** —— 连续登录失败达到阈值后锁定账号一段时间。阈值与锁定时长 —— `TODO(REQ-LGN-007)`
**REQ-LGN-008 登出** —— 用户主动登出时清理本地会话、门店上下文、缓存的业务数据与 WebView Cookie,见《App 门店上下文与会话管理文档》
**REQ-LGN-009 会话与 Token** —— access token 短期有效,refresh token 轮换续期;refresh 失效后跳转登录页。轮换策略见《后端安全与认证文档》。具体有效期 —— `TODO(REQ-LGN-009)`
**REQ-LGN-010 门店上下文** —— 登录后必须确定唯一「当前门店」;切换门店时级联失效所有门店相关缓存与在途请求,见《App 门店上下文与会话管理文档》
## 4.1.3 店长
1. 店长通过自己注册的手机号登录页面;
2. 店长通过注册的用户名、密码登录页面;
3. 店长点击「用户协议」,可以查看用户协议的具体内容;
4. 店长点击「隐私协议」,可以查看隐私协议的具体内容。
## 4.1.4 技工
1. 技工通过自己注册的手机号登录页面;
2. 技工通过自己的用户名、密码登录页面;
3. 技工点击「用户协议」,可以查看用户协议的具体内容;
4. 技工点击「隐私协议」,可以查看隐私协议的具体内容。
> 登录环节店长与技工无差异;差异从登录成功后的角色化导航开始,见[导航收敛与角色化配置](./02-HOM-APP首页与导航.md#425-导航收敛与角色化配置)。
## 4.1.5 业务数据列表
用户信息当前存放在 O2O 接单宝后台,用户的登录验证数据一致性以 O2O 接单宝后台的数据为用户主数据。
| # | 字段 | 字段名 | 数据来源 | 说明 |
| --- | --- | --- | --- | --- |
| 1 | 手机号 | PhoneNum | O2O 后台 | 用户注册手机号 |
| 2 | 用户名 | Username | O2O 后台 | 用户在 O2O 注册时的用户名 |
| 3 | 密码 | Password | O2O 后台 | 用户名设置的密码 |
| 4 | 用户协议 | UserProtocol | APP 后台管理 Web | 由法务审核后的协议条例 |
| 5 | 隐私政策 | PrivateProtocol | APP 后台管理 Web | 由法务审核后的隐私政策 |
| 6 | 验证码 | ValidateCode | 第三方短信网关 | 后台调用短信网关发送至用户手机 |
| 7 | 角色 | RoleCode | O2O 后台 / APP 后台 | 店长 / 技工,决定导航与权限 —— 权威来源待确认 `TODO(REQ-LGN-011)` |
| 8 | 门店列表 | StoreList | 马上下单 | 该账号可访问的门店集合 |
| 9 | 协议同意记录 | ProtocolConsent | APP Backend | 协议版本号 + 同意时间戳 |
账号登录业务数据
## 4.1.6 验收标准
1. 未勾选协议时登录按钮为禁用态,无法提交;
2. 单门店账号登录后直接进入首页,不出现门店选择步骤;
3. 多门店账号登录后必须完成门店选择才能进入首页;
4. 主动登出后,重新启动 APP 不会恢复到已登录状态,且 WebView 中原会话不可复用;
5. refresh token 失效后,任意业务页面的接口调用都会被统一拦截并跳转登录页,不出现半登录态;
6. 切换门店后,首页及各业务页展示的数据全部属于新门店,无旧门店数据残留。
---
## 附:本模块归拢信息
> 以下内容从主文件的其它章节归拢而来,便于本模块独立评审。**回灌主文件时不处理本分界线以下的部分**——主文件的附录仍是全局视图。
### 附-1 业务数据字典(主文件附录 A.1)
| # | 数据集 | 来源 | 安全 | 备注 |
| --- | --- | --- | --- | --- |
| 1 | 第三方验证码 | App Backend | HTTPS | 短信调用第三方短信网关 |
| 2 | 登录成功结果集 | App Backend | HTTPS | 账号密码登录与验证码登录共用 |
| 3 | 用户协议与隐私政策完整内容 | App Backend | HTTPS | 注册/登录前须确认([REQ-NFR-020](../Continental-Retail-APP-PRD.md#84-安全与合规) |
登录模块数据集(摘自主文件[附录 A.1](../Continental-Retail-APP-PRD.md#a1-登录))。字段级清单见上方 [4.1.5](#415-业务数据列表)。
> 主文件[附录 A.9 个人中心](../Continental-Retail-APP-PRD.md#a9-个人中心)第 5 条隐含一条与本模块相关、尚未成文的规则:**多设备可同时登录,单设备登出不影响其它设备**。这与[账号权限管控痛点](../Continental-Retail-APP-PRD.md#22-账号权限管控)中「账号共用」的治理诉求存在张力 —— 是否需要单设备登录限制,在 `TODO(REQ-LGN-009)` 一并确认。
### 附-2 权限矩阵(主文件附录 B 本模块分行)
**图例**:✅ 完整权限 · 🔸 受限 · ⚙️ 需店长/后台显式授权 · ✗ 无权限 · ❓ 待确认
| 功能 | 店长 | 技工 | 备注 / 待确认 |
| --- | --- | --- | --- |
| 手机验证码 / 账号密码登录 | ✅ | ✅ | |
| 第三方登录(微信/支付宝) | ❓ | ❓ | 仅见于设计稿 `TODO(REQ-LGN-003)` |
| 注册 | ❓ | ❓ | 需审核 `TODO(REQ-LGN-004)` |
登录模块权限矩阵(摘自主文件[附录 B](../Continental-Retail-APP-PRD.md#附录-b-权限矩阵)
适用的全局权限实施规则:接口层强制(REQ-ACC-004);⚙️ 类由店长或后台经[人员管理「可用系统」](./09-STM-门店管理.md#49-门店管理)授予(REQ-ACC-005);**🔸 与 ❓ 项在待确认关闭前,一律按更严格的一侧实现**(REQ-ACC-006);权限变更后用户下次进入 App 即生效(REQ-ACC-007)。
### 附-3 待确认项(主文件 10.2.1)
| 编号 | 待确认内容 | 建议决策方 |
| --- | --- | --- |
| REQ-LGN-001 | 验证码单日获取上限 | 安全 / 后端 |
| REQ-LGN-003 | 微信/支付宝第三方登录是否纳入本期(仅见于设计稿) | 产品 |
| REQ-LGN-004 | 注册表单字段、审核人、审核时效(设计稿有「我要注册」) | 产品 / 运营 |
| REQ-LGN-006 | 密码长度、复杂度、有效期、历史密码不可复用条数 | 安全 |
| REQ-LGN-007 | 登录失败锁定阈值与锁定时长 | 安全 |
| REQ-LGN-009 | access / refresh token 有效期 | 安全 / 后端 |
| REQ-LGN-011 | 角色(RoleCode)的权威来源是 O2O 后台还是 APP 后台 | 架构 |
登录模块待确认项(摘自主文件 [10.2.1](../Continental-Retail-APP-PRD.md#1021-登录lgn)7 条)
### 附-4 配图清单(主文件附录 C 4.1 节)
| 序 | 说明 | 文件 |
| --- | --- | --- |
| 1 | 设计稿-登录页(验证码 / 密码 / 第三方三种登录方式 + 注册入口 + 协议勾选) | `../app-design-images/登录.png` |
登录模块配图清单,1 张(设计稿 1)。说明较主文件[附录 C](../Continental-Retail-APP-PRD.md#附录-c-图表清单)已按实际截图内容补充,主文件附录 C 回灌时应一并更新。
### 附-5 本次拆分新增发现
本模块**未新增编号需求**。逐图核看发现的两处缺口均为**设计稿状态缺失**,已就地记在图下:登录按钮的禁用态未画、密码登录模式与「忘记密码」入口无设计稿。两者都已被现有的[验收标准第 1 条](#416-验收标准)与 [REQ-LGN-006](#412-业务规则) 覆盖,补稿即可,无需新增需求编号。