mailbox-change-gate.sh

20260916-201504 轮 · 看它的历史
靶子: 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
✅ 全绿