Files
zyt/TEST_CHECKLIST.md
2026-03-27 18:06:12 +08:00

193 lines
5.0 KiB
Markdown
Raw Permalink 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.
# 首次登录修改密码功能 - 测试清单
## 测试前准备
1. ✅ 执行安装脚本或 SQL,添加 `is_paw` 字段
2. ✅ 设置测试账号:`UPDATE la_admin SET is_paw = 0 WHERE id = 1;`
3. ✅ 确认前后端代码已更新
## 测试场景
### 场景 1:正常登录流程
**步骤:**
1. 使用 `is_paw = 0` 的账号登录
2. 观察是否自动跳转到修改密码页面
3. 输入新密码(至少 6 位)
4. 点击"确认修改"
5. 观察是否提示"密码修改成功,请重新登录"
6. 使用新密码重新登录
7. 观察是否能正常进入系统
**预期结果:**
- ✅ 登录后自动跳转到修改密码页面
- ✅ 修改密码成功
- ✅ 使用新密码能正常登录
- ✅ 数据库中 `is_paw` 已更新为 1
### 场景 2:URL 防护测试(重要!)
**步骤:**
1. 使用 `is_paw = 0` 的账号登录
2. 登录后会跳转到修改密码页面
3. 在浏览器地址栏直接输入其他页面 URL(如:`/workbench/index`
4. 按回车访问
**预期结果:**
- ✅ 无论输入什么 URL,都会被强制跳转回修改密码页面
- ✅ 无法绕过修改密码页面访问其他页面
### 场景 3:密码验证测试
**步骤:**
1. 在修改密码页面输入少于 6 位的密码
2. 点击"确认修改"
**预期结果:**
- ✅ 提示"密码长度不能少于6位"
**步骤:**
1. 两次输入不同的密码
2. 点击"确认修改"
**预期结果:**
- ✅ 提示"两次输入的密码不一致"
### 场景 4:已修改密码的用户
**步骤:**
1. 使用 `is_paw = 1` 的账号登录
2. 观察是否直接进入系统
**预期结果:**
- ✅ 直接进入系统,不跳转到修改密码页面
**步骤:**
1. 在浏览器地址栏输入 `/change-password`
2. 按回车访问
**预期结果:**
- ✅ 自动跳转到首页,无法访问修改密码页面
### 场景 5:未登录用户
**步骤:**
1. 退出登录
2. 在浏览器地址栏输入 `/change-password`
3. 按回车访问
**预期结果:**
- ✅ 自动跳转到登录页面
### 场景 6:企业微信登录
**步骤:**
1. 设置企业微信绑定的管理员 `is_paw = 0`
2. 使用企业微信登录
3. 观察是否跳转到修改密码页面
**预期结果:**
- ✅ 登录后自动跳转到修改密码页面
- ✅ 修改密码流程与账号密码登录一致
### 场景 7:页面刷新测试(重要!)
**步骤:**
1. 使用 `is_paw = 0` 的账号登录
2. 跳转到修改密码页面后,刷新浏览器(F5 或 Ctrl+R)
3. 观察页面状态
**预期结果:**
- ✅ 刷新后仍然停留在修改密码页面
- ✅ 不会跳转到其他页面
**步骤(进阶测试):**
1. 使用 `is_paw = 0` 的账号登录
2. 跳转到修改密码页面
3. 在地址栏输入其他页面 URL(如 `/workbench/index`
4. 按回车
5. 观察是否跳转回修改密码页面
6. 刷新浏览器
7. 观察是否仍然在修改密码页面
**预期结果:**
- ✅ 输入其他 URL 后被拦截,跳转回修改密码页面
- ✅ 刷新后仍然在修改密码页面
- ✅ 无法通过任何方式绕过
### 场景 8:多标签页测试
**步骤:**
1. 使用 `is_paw = 0` 的账号登录
2. 跳转到修改密码页面
3. 打开新标签页,访问系统其他页面
**预期结果:**
- ✅ 新标签页也会被强制跳转到修改密码页面
## 数据库验证
### 修改前
```sql
SELECT id, account, is_paw FROM la_admin WHERE id = 1;
-- 应该显示 is_paw = 0
```
### 修改后
```sql
SELECT id, account, is_paw FROM la_admin WHERE id = 1;
-- 应该显示 is_paw = 1
```
## 常见问题排查
### 问题 1:登录后没有跳转到修改密码页面
**检查:**
- 数据库中 `is_paw` 字段是否为 0
- 前端代码是否正确判断 `is_paw` 字段
- 浏览器控制台是否有错误
### 问题 2:刷新后可以进入系统
**检查:**
- 后端 `AdminLogic::detail()` 方法是否返回 `is_paw` 字段
- 前端 `getUserInfo()` 方法是否更新 `isPaw` 状态
- 路由守卫是否在获取用户信息后检查 `isPaw`
- 浏览器控制台查看 API 返回的数据是否包含 `is_paw`
### 问题 3:可以通过 URL 绕过修改密码页面
**检查:**
- `permission.ts` 路由守卫是否正确配置
- `userStore.isPaw` 状态是否正确存储
- 浏览器控制台查看路由守卫是否执行
### 问题 4:修改密码后 `is_paw` 没有更新
**检查:**
- 后端 `changeFirstPassword` 方法是否正确更新数据库
- 查看数据库确认字段值
- 检查后端日志是否有错误
### 问题 5:修改密码后无法登录
**检查:**
- 密码加密方式是否正确(应使用 `create_password` 函数)
- 检查后端日志
- 尝试重置密码
## 测试完成标准
- ✅ 所有 8 个测试场景都通过
- ✅ 数据库字段正确更新
- ✅ 无法通过任何方式绕过修改密码页面
- ✅ 密码验证规则正常工作
- ✅ 修改密码后能正常登录使用系统
## 性能测试
- ✅ 路由守卫不影响正常用户的访问速度
- ✅ 登录流程响应时间正常(< 2 秒)
- ✅ 修改密码操作响应时间正常(< 1 秒)