mailbox-change-gate.sh
靶子: http://localhost:20098 容器: wt_h8_tp8
✓ 前置:e2e_bot 登录成功
✓ 前置:起始邮箱是常态值
── A 零校验旁路 ──
✓ A1 POST /User/changeuseremail → 404(方法已删)
✓ A1 └ 响应里没有成功标记
✓ A1 └ 库里邮箱没被改
── A2 已有邮箱的人不得走单码路(set_mailbox = 首次绑定专用) ──
✓ A2 🔴 拿着**正确**的新邮箱码走单码路,仍被拒
✓ A2 🔴 └ 库里邮箱没被改(判据打在 DB,不是文案)
── B 换绑 ──
✓ B0 中间产物:两枚码都已在服务端(证明链路走得到校验那一步)
✓ B1 🔴 新码对、旧码错 → 被拒(证明旧邮箱码真的参与判定)
✓ B1 └ 库里邮箱没被改
✓ B2 旧码 + 新码都对 → 成功
✓ B2 🔴 └ 库里邮箱**确实变成了**新值
✓ B3 成功后旧码已清(一次性)
✓ B3 成功后新码已清(一次性)
✓ B 还原:邮箱回到常态
── C 抗穷举 ──
✓ C1 🔴 错 5 次之后,**拿正确的码也进不去**(码被作废而不是只拒本次)
✓ C1 └ 库里邮箱没被改
✓ C1 └ 旧码已从服务端删除
── C2 发码端(真调一次,收件人是 @e2e.invalid 保留域,必投递失败)──
✓ C2 🔴 发出来的码是 6 位数字
✓ C2 └ 带 errnum 计数位(否则抗穷举无从谈起)
✓ C2 └ TTL == 600 秒(原先是 86400)
── D 首次绑定(第三方登录用户没有邮箱,实测 11 个)──
✓ D0 前置:已把 e2e_bot 变成无邮箱用户
✓ D1 🔴 无邮箱用户走单码路 → **成功**(没把第三方登录用户锁死)
✓ D1 └ 库里邮箱确实绑上了
✓ D2 绑完之后再走单码路 → 被拒(已有邮箱必须走换绑)
✓ D2 └ 库里邮箱没被改
── D3 无邮箱用户不得走换绑路(旧码无从谈起)──
✓ D3 无邮箱用户走 change_mailbox → 被拒
✓ D3 └ 库里邮箱仍为空
✓ 收尾:邮箱已无条件还原成常态值
──────────────────────────────
PASS=29 FAIL=0
✅ 全绿