login-guard-statemachine

20260916-181749 轮 · 看它的历史
靶子 BASE=http://localhost:20098  (PW_BASE_URL 显式指定)

=== G1 阈值边界:7 次真实失败 + 1 次错误验证码 ⇒ 不锁 ===
  PASS  G1-a 错误验证码返回 CAPTCHA_INVALID(实得 "CAPTCHA_INVALID")
  PASS  G1-b 该请求本身未返回锁定
  PASS  G1-c 🔴 账号未被错误验证码推入硬锁(实得 "请输入验证码")

=== G2 反向守卫:承接 G1,第 8 次真实密码失败 ⇒ 必须锁定 ===
  PASS  G2-a 🔴 第 8 次真实失败仍触发硬锁(暴破上限未放松)
  PASS  G2-b 锁定时长仍为 900 秒

=== G3 并发堆叠:2 次真实失败 + 32 并发错误验证码 ⇒ 不锁 ===
  PASS  G3-a 并发突发中零锁定响应(实得 0/32)
  PASS  G3-b 🔴 突发后账号未被锁(实得 "请输入验证码")
  PASS  G3-c 仍停在"要验证码"这一档,计数未被并发污染(实得 "CAPTCHA_REQUIRED")

=== G4 纵深:超长 code 被拒且不消耗验证码 ===
  PASS  G4-a 超长 code 被拒(实得 "CAPTCHA_INVALID")
  PASS  G4-b 超长入参未消耗该验证码,同 id + 正确答案仍能过闸(实得 "用户名或密码错误")

=== G5 守卫:真实账号正确密码仍可登录并清账 ===
  FAIL  G5-a 正确验证码 + 正确密码 → 签发 token(实得 "")
  PASS  G5-b 登录成功已清账:下一次失败不再立刻要验证码

=== G6 scope 隔离 ===
  PASS  G6-a DDM 侧已进入"要验证码"档
  PASS  G6-b SucaiManager 侧同名账号不受影响(scope 分桶)

=== G7 SucaiManager 阈值边界(与 G1 同构)===
  PASS  G7-a 错误验证码返回 CAPTCHA_INVALID(实得 "CAPTCHA_INVALID")
  PASS  G7-b 🔴 SucaiManager 账号未被错误验证码推入硬锁(实得 "请输入验证码")

PASS=15 FAIL=1
失败项:
  - G5-a 正确验证码 + 正确密码 → 签发 token(实得 "")