e96fbb2475
35 项验收项,7 大类: 1. 扫码登录(6 项) 2. MFA 绑定(3 项) 3. MFA 验证(高危守卫,8 项) 4. P0/P1 合规(4 项) 5. 端到端业务流(3 项) 6. 性能稳定性(4 项) 7. 回滚预案 每项给预期结果 + 验证方法 + 失败处理。 部署完 v0.7.0 后逐项打勾,任何一项 ❌ 立即回滚。 Co-Authored-By: Claude <noreply@anthropic.com>
5.4 KiB
5.4 KiB
E2E 验收清单 v0.7.0(扫码登录 + MFA)
部署完 v0.7.0 后,逐项打勾。任何一项 ❌ 立即回滚。 每项给出预期结果 + 验证方法 + 失败处理。
0. 部署完成(用户跑过 DEPLOY-LOGIN-MIGRATION-v0.7.0.md 全部步骤)
- 后端
alembic upgrade head跑通(head =025_messages_id_uuid) - 4 端 dist 已上传到宿主机
/opt/wecom-it-desk/frontend-*/dist/ - nginx
nginx -t通过 +nginx -s reload完成 docker restart wecom_it_backend成功- 容器状态
docker ps显示 backend/redis/postgres 全部 Up
1. 扫码登录(Phase 1.1 / 1.2 / 1.3)
1.1 门户页面加载
- 浏览器打开
https://<生产域名>/itportal/ - 看到 QrcodeLogin 页面(二维码 + 倒计时)
- 不再显示旧的"账号密码"登录
1.2 二维码生成
- 倒计时从 120 秒开始
- 刷新按钮可用
- DevTools Network:
POST /api/auth_qrcode/create返回 200 + ticket
1.3 扫码
- 用企微扫 → 企微 OAuth2 跳回 callback
- 门户页面状态从
waiting→scanned(显示"已扫码,等待确认") - DevTools Network:
POST /api/auth_qrcode/scan成功
1.4 坐席确认
- 已登录坐席在
/itagent/收到确认弹窗 - 点"确认"→ 门户
waiting→confirmed→ 跳转/itagent/ - localStorage 有
agent_token/portal_token
1.5 角色分发
- 双角色坐席(admin+agent)→ 跳
/itportal/select - 仅 admin → 跳
/itadmin/ - 仅 agent → 跳
/itagent/ - 仅 user → 跳
/itdesk/
1.6 过期处理
- 120 秒不扫 → 状态变
expired+ 提示"二维码已过期,请刷新"
2. MFA 绑定(Phase 2.4)
2.1 绑定入口
- 坐席登录后 → 顶栏头像 → "绑定 MFA"
- 进
/itagent/mfa-bind页面
2.2 扫码绑定
- 看到 TOTP 二维码(otpauth://totp/...)
- 用 Google Authenticator / 微软 Authenticator 扫
- 输入 6 位 OTP → 点"验证" → 成功
- 页面显示"已绑定" + 备份信息
2.3 API 验证
GET /api/mfa/status返回bound: true, enabled: trueGET /api/mfa/users(admin) 看到该坐席 bound=true
3. MFA 验证(高危操作守卫)
3.1 30 分钟有效期
- 坐席 admin 角色登录 → 绑 MFA → 调
/api/admin/high-risk/demo/role_change - 未先调 /api/mfa/verify → 返回
2001 需要 OTP - 调
POST /api/mfa/verify {otp_code: "123456"}→ 成功 - 再调 高危端点 → 200 通过
- 等 31 分钟 → 再次调 → 又返回 2001(TTL 失效)
3.2 5 类高危操作
POST /api/admin/high-risk/demo/role_change→ 200POST /api/admin/high-risk/demo/config_change→ 200POST /api/admin/high-risk/demo/data_export→ 200POST /api/admin/high-risk/demo/account_disable→ 200POST /api/admin/high-risk/demo/account_create_reset→ 200
3.3 角色拒绝
- 非 admin 角色调高危端点 → 4003 仅管理员
3.4 白名单查询
GET /api/admin/high-risk/whitelist返回 5 类元数据
4. P0/P1 合规验证
4.1 WebSocket 连接
- H5 员工端开 DevTools → Network → WS
- WS 连接建立,没有 1006 / missing argument 错误
- 坐席发消息 → H5 端 100ms 内收到(无轮询 3-5s 延迟)
4.2 消息 ID 类型
psql -d wecom_it -c 'SELECT id FROM messages LIMIT 1;'返回 UUID 格式- 前端消息轮询不再偶发 500
- 跨会话消息不再串号
4.3 nginx access_log
docker exec wecom_it_nginx tail /var/log/nginx/access.log | head -3- 不包含
Authorization:/Cookie:字样 - 只剩 IP / method / path / status
4.4 Gitea token
cat .git/config | grep 5ad83d返回空(token 已撤销)git push试一下:应该失败(无 push 权限,符合预期)
5. 端到端业务流(回归)
5.1 H5 → 坐席 完整流程
- H5 员工发起会话 → 排队
- 坐席收到分配 → WS 推送
- 坐席发消息 → 员工 < 100ms 收到
- 转人工、邀请、满意度流程无 regression
5.2 管理员后台
- 仪表盘加载正常
- 坐席管理 CRUD 正常
- 功能开关可切换
- 集成配置 6 个系统显示完整
- MFA 管理页
/mfa-manage表格可搜索/过滤/分页 - 重置 MFA 按钮可弹 ElMessageBox 二次确认
5.3 端点路径(临时 4 xfail)
POST /api/conversations/{id}/messages仍 404 — pre-existing,不影响生产- 实际走 H5 的
/api/h5/conversations/current/messages路径
6. 性能与稳定性
- 长时间压测(可选):
wrk -t4 -c100 -d60s https://<域>/api/auth_qrcode/create - 无 5xx 错误
- Redis 连接稳定(无 timeout)
- PG CPU < 50%
7. 回滚预案
如果任意 ❌ 项:
# 1. 停止后端
sudo docker stop wecom_it_backend
# 2. 恢复 4 端 dist
sudo cp -r /opt/wecom-it-desk/dist-backup-*/* /opt/wecom-it-desk/frontend-*/dist/
# 3. 回滚 alembic(只回 025,022/023 保留)
sudo docker start wecom_it_backend
sudo docker exec wecom_it_backend alembic downgrade 024
# 4. nginx 回滚
sudo docker exec wecom_it_nginx nginx -s reload
详见 DEPLOY-LOGIN-MIGRATION-v0.7.0.md 末尾"回滚预案"。
✅ 验收人签字
| 角色 | 姓名 | 日期 | 结果 |
|---|---|---|---|
| 部署 | |||
| 验收 | |||
| 复核 |