desktop-login-unlock
✅ 前置:守卫已清干净
{"cur":0,"max":8,"extra_left":0,"extra_total":0,"extra_by":0,"extra_at":0,"blocked":false,"lock_remain":0}
=== A · 连续输错口令 → 硬锁 ===
✅ A1 打满 8 次后被锁(文案是"登录失败次数过多")
{"status":1,"info":"0","data":"登录失败次数过多,请 900 秒后重试"}
✅ A2 面板口径也看得到锁着
{"cur":0,"max":8,"extra_left":0,"extra_total":0,"extra_by":0,"extra_at":0,"blocked":true,"lock_remain":899}
=== B · 锁定期内正确口令也被拒 ===
✅ B1 🔴 拿正确口令也被锁挡住(否则下面 D 组证明不了任何东西)
{"status":1,"info":"0","data":"登录失败次数过多,请 899 秒后重试"}
=== C · 锁定要有观察点 ===
✅ C1 🔴 jnc_sys_log 多了 security_login_blocked / actor_type=ddm
43 → 44
✅ C2 🔴 再被拒 5 次,审计**不再增长**(按 (scope,账号) 5 分钟去重)
44 → 44
=== D · 管理员管理页解除锁定 ===
✅ D1 列表页出现「解除登录锁定」入口
✅ D2 并写明还剩多久
还剩约 15 分钟)
✅ D3a 前置:桌面端账号(990864)那一行**有**解锁 href(证明这个形态确实会渲染)
guanliyuanguanli_guanliyuan_unlock_post/id/990864
✅ D3b 🔴 守卫:后台管理员那一行**没有**解锁入口(它走的是另一套桶,刻意不给)
guanliyuanguanli_guanliyuan_unlock_post/id/990986
✅ D4 🔴 纯 GET 被 method 闸拒
✅ D5 解锁接口返回成功
✅ D6 守卫状态清零
{"cur":0,"max":8,"extra_left":0,"extra_total":0,"extra_by":0,"extra_at":0,"blocked":false,"lock_remain":0}
[还原] e2e_admin10.userauth = [12,2,66,65,3] ✔
异常: SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON
at JSON.parse (<anonymous>)
at APIResponse.json (/data/AICode/e2e/ma_dev_v2/ma/bin/workspace/playwright/node_modules/playwright-core/lib/client/fetch.js:300:17)
at async /data/AICode/e2e/ma_dev_v2/ma/bin/workspace/playwright/e2e/e2e-desktop-login-unlock.js:125:17
at async /data/AICode/e2e/ma_dev_v2/ma/bin/workspace/playwright/e2e/lib-perm-e2e.js:135:7
PASS=13 FAIL=0