55 lines
3.8 KiB
Markdown
55 lines
3.8 KiB
Markdown
# 移动端登录密码必填校验操作日志
|
||
|
||
操作时间:2026-09-04 22:50:49
|
||
|
||
操作类型:修改、扩展
|
||
|
||
影响模块:用户端 Flutter App 登录页、工作人员端 Flutter App 登录页及组件测试
|
||
|
||
## 操作前状态
|
||
|
||
两个 App 的手机号密码登录页只校验手机号格式。输入合法手机号并将密码留空后,页面仍调用会话登录方法并向后端发送空密码;后端执行认证比对后统一返回密码错误,页面因此显示“手机号或密码错误”,无法准确指出密码未填写。工作人员端密码框同时缺少回车提交行为。
|
||
|
||
## 具体操作
|
||
|
||
1. 两端提交函数同时计算手机号格式和密码必填状态,任一字段无效时立即返回,不调用会话登录方法。
|
||
2. 密码字段增加“请输入密码”错误提示,手机号与密码错误可同时显示。
|
||
3. 校验失败后聚焦首个无效字段;手机号错误优先于密码错误。
|
||
4. 修改对应字段时清除字段错误,修改任一凭据时清除旧的接口级错误。
|
||
5. 工作人员端密码框增加回车提交,与按钮共用同一校验函数。
|
||
6. 密码仅判断是否为空,非空密码保持原样,不裁剪空格、不执行注册阶段的最短长度校验。
|
||
7. 两端测试引入记录型会话替身,覆盖空密码不调用登录、双字段错误、焦点、清错、回车提交和密码原样传递。
|
||
8. 同步用户端、工作人员端需求说明及独立项目文档。
|
||
|
||
## 操作后状态
|
||
|
||
用户端和工作人员端在空密码时均显示字段级中文提示,不再向后端发送登录请求。手机号和密码同时无效时会完整展示两项问题并定位首个错误;输入修正后提示按字段清除。按钮和密码框回车执行相同校验,合法非空密码仍按原值交给既有会话层。
|
||
|
||
## 代码变更
|
||
|
||
- `apps/user_app/lib/ui/features/auth/login_page.dart`(+32/-5,当前 244 行):密码必填、双字段校验、焦点和清错行为。
|
||
- `apps/service_app/lib/ui/features/auth/login_page.dart`(+33/-5,当前 217 行):同等校验能力及回车提交。
|
||
- `apps/user_app/test/ui/login_page_test.dart`(+66/-4,当前 101 行):用户端登录页回归测试。
|
||
- `apps/service_app/test/ui/login_page_test.dart`(+61/-4,当前 96 行):工作人员端登录页回归测试。
|
||
- `docs/03-用户端App需求.md`、`docs/04-服务端App需求.md`:同步登录校验验收口径。
|
||
- `docs/项目文档_移动端登录密码必填校验_v1.0.md`(新增 68 行):记录结构、行为、维护方法和边界。
|
||
|
||
## 验证结果
|
||
|
||
- 用户端 `flutter analyze --no-pub`:通过,无问题。
|
||
- 工作人员端 `flutter analyze --no-pub`:通过,无问题。
|
||
- 用户端 `flutter test --no-pub`:通过,共 29 项测试。
|
||
- 工作人员端 `flutter test --no-pub`:通过,共 7 项测试。
|
||
- 两端登录页定向测试:各 5 项通过;明确验证空密码时登录调用次数为 0。
|
||
- 两端 `flutter build web --release --no-pub --dart-define=API_BASE_URL=http://127.0.0.1:12426`:通过。
|
||
- `git diff --check`:通过,仅提示仓库既有的 LF/CRLF 转换策略,无空白错误。
|
||
- 本地 Release 静态服务已恢复:用户端 `5180`、工作人员端 `5181` 均返回 HTTP 200。
|
||
- 本地后端已按开发配置恢复监听 `12426`,平台健康接口返回 HTTP 200。
|
||
|
||
## 风险评估
|
||
|
||
- 变更只发生在两个登录页面,不修改后端、会话公共接口、路由或数据库,兼容既有调用方。
|
||
- 密码不裁剪、不转换、不提前校验长度,避免改变既有合法凭据的认证结果。
|
||
- 空密码仍可由绕过客户端的调用方直接请求后端;后端继续使用现有统一认证失败语义,这是本次确认的范围边界。
|
||
- 错误提示增加后会使输入框纵向高度变化,但页面位于可滚动容器内,小屏幕不会被固定高度截断。
|