oauth-wx-register.sh
靶子: http://localhost:20098 (TP8_PORT=20098) 容器=wt_h8_tp8
链A 身份: openid=e2e_oauth_openid_001 unionid=e2e_oauth_unionid_001 链B 身份: unionid=e2e_wxapp_unionid_001
--- 前置清理 ---
PASS P0 前置清理干净(两条链身份共 0 行)
--- R0 有副作用的内部方法不可 URL 直达(参数喂齐,确保守卫真被执行) ---
PASS R0-1 /Login/_thirdpartreg → 404(_denyDirectUrlAccess 生效)
PASS R0-2 /WxAuth/findOrCreateWxappUser → 404(_denyDirectUrlAccess 生效)
PASS R0-3 /WxAuth/_wxappLoginIssue → 404(_denyDirectUrlAccess 生效)
PASS R0-4 /PayV2/_queryByDdnumForPoll → 404(_denyDirectUrlAccess 生效)
PASS R0-5 /XenditV2/processWebhookPayload → 404(_denyDirectUrlAccess 生效)
PASS R0-6 以上 5 次直达探测未建出任何账号
--- R1 链A 首次进入(应走确认页 → 注册) ---
PASS R1-1 通道 302 → Login/thirdpartlogin
PASS R1-2 thirdpartlogin 302 → Login/thirdpartreg(未直接建号)
PASS R1-C1 确认页含指向 thirdpartreg_post 的表单
PASS R1-C2 确认页渲出三方昵称 e2ewx
PASS R1-C3 确认页发出 csrf_token(len=32)
PASS R1-C4 agreed_tos_ver 严格等于当前发布版(1)
PASS R1-C5 agreed_privacy_ver 严格等于当前发布版(1)
PASS R1-C6 未带同意版本提交 → 零建号(jnc_user 仍 878 行)
PASS R1-C7 未带同意版本 → 服务端明确拒绝(协议门生效)
PASS R1-C8 错误 csrf_token → 拒绝
PASS R1-C9 两次被拒后仍未建号
PASS R1-3 完整提交 302 → Index/index(注册落地)
PASS R1-4 建号成功 (uid=991224 account=e2ewx_591880)
PASS R1-5 userwxunionid 落库且严格相等
PASS R1-6 userwxid 落库且严格相等
PASS R1-7 userwxinfo 为空(凭据不落库)
PASS R1-8 vip=0(普通会员)
PASS R1-9 vgold == register_reward (5000)
PASS R1-10 ac1 == ac1_reg_give (4)
PASS R1-11 ac2 == ac2_reg_give (6)
PASS R1-12 默认相册已建(1 个)
PASS R1-13 注册赠金流水已记(1 条)
--- 三个注册钩子 ---
PASS R1-H1 协议台账 2 行(registration_tos + privacy_policy)
PASS R1-H2 registration_tos 台账版本 == 当前发布版(1)
PASS R1-H3 privacy_policy 台账版本 == 当前发布版(1)
PASS R1-H4 两行均 action=accept / method=clickwrap / client=web
PASS R1-H5 发券数 == 当前生效的 signup 批次数(1)
PASS R1-H6 券来源全为 signup
PASS R1-H7 邀请绑定成功 inviter_uid=990863 (码 AFQC7FCJ)
PASS R1-H8 bind_source=manual(表单手填)
PASS R1-14 首页 topbar 渲出本账号 e2ewx_591880(登录态用户可见)
PASS R1-15 首页不再出现登录入口(确已登录)
PASS R1-S1 按 cookie SID 读到本轮 session (sess_e7cf3118fecf16ecd2934fcaaed1f161)
PASS R1-S2 该 session 的 userid == 本轮 uid(991224,排除陈旧文件)
PASS R1-S3 白名单剥净了喂进去的 4 个凭据/画像键
PASS R1-S4 session 仍含 unionid(白名单未误删必需键)
PASS R1-S5 thirdreg_csrf 已被一次性消费
--- R2 链A 同身份重入(应走登录分支,不建新号) ---
PASS R2-1 直接 302 → Index/index(未再经确认页)
PASS R2-2 未建第二个号(仍 1 行)
PASS R2-3 命中同一 uid(991224)
PASS R2-4 times +1 (0 -> 1,证明真走了登录分支)
PASS R2-5 重入未重复发券(仍 1 张)
--- R3 链B 小程序首登(应建号 + 自动发券) ---
PASS R3-1 wxapp_login_e2e 返回成功
PASS R3-2 已签发 access_token(双 token 流跑通)
PASS R3-3 小程序用户已建号 (uid=991225)
PASS R3-4 vgold == register_reward (5000)
PASS R3-5 小程序首登发券数 == signup 批次数(1)【本次接的挂点】
PASS R3-6 小程序券来源全为 signup
PASS R3-7 二次登录未建第二个号
PASS R3-8 二次登录未重复发券(仍 1 张)
PASS R3-9 缺 X-Client-Type:40 → 拒
PASS R3-10 被拒的请求未建号
--- R4 赠币流水归属(D2) ---
PASS R4-1 小程序赠币流水 dealuserid == 新 uid(991225)【改前恒 0】
PASS R4-2 本轮未产生归属为 0 的小程序赠币流水
--- R5 老用户重登补登录信息(B2/B3) ---
PASS R5-1 login_time 已刷新(0 -> 1789562784)
PASS R5-2 login_ip 已刷新(172.18.0.1)
PASS R5-3 times +1 (1 -> 2)
PASS R5-4 默认相册被自愈补建
--- R6 审计打点口径(B1) ---
PASS R6-1 首登记了 1 条 auth_login_success(重登多次也仍是 1)
--- R7 unionid 长度闸(A3,D1 的硬前置) ---
PASS R7-1 36 字符 unionid → 拒(带明确文案)
PASS R7-2 被拒未签发 token
PASS R7-3 超长 unionid 未建号(也未被静默截断成 32 位入库)
--- R8 唯一索引与并发首登(D1) ---
PASS R8-1 jnc_ma 上 5 个三方 id 唯一索引已就位
PASS R8-2 空串行的投影列全为 NULL(多空串共存的前提)
PASS R8-3 同 unionid 并发两次首登只建出 1 个号【改前会建 2 个】
purged uid=991226
--- R9 封禁闸(A1) ---
PASS R9-1 封禁账号(status=1)登录被拒
PASS R9-2 带结构化 code AUTH_ACCOUNT_DISABLED(供 Taro 弹提示)
PASS R9-3 被拒未签发 token
PASS R9-4 封禁用户未被当成新人再建一个号
PASS R9-5 拒登已记审计(0 -> 1)
PASS R9-6 解封后恢复正常登录(闸没误伤)
--- R10 注销冷静期恢复(A2) ---
PASS R10-1 待注销账户仍可登录(冷静期内)
PASS R10-2 登录即撤销注销:user_deleted_at 已回 NULL【本次接的核心挂点】
PASS R10-3 已清洗账户(user_purged_at 非空)拒登
PASS R10-4 带结构化 code AUTH_ACCOUNT_CANCELLED
PASS R10-5 墓碑账户未签发 token
--- R11 web 三方封禁闸(A1,同款的另一半) ---
PASS R11-1 封禁的三方账号 → 明确提示已禁用
PASS R11-2 未被引导去注册页(Location=[无])
PASS R11-3 确认页拒绝渲染注册表单(封禁用户拿不到注册入口)
PASS R11-4 未建出第二个号(仍 1 行,守卫断言)
--- 后置清理 ---
purged uid=991224
purged uid=991225
purged 2 个测试 session 文件
PASS=87 FAIL=0 SKIP=0