fix(setup): 登录失效时自动扫码并修复空回调白名单 - #1223
Conversation
|
感谢这个修复 👍 两个坑(console 半失效导致弹不出扫码框、新建应用省略 自动评审这边跑下来没有发现阻断性问题,验证情况:
有两条非阻断的小建议,供你参考:
以上是自动评审的初步意见,最终以维护者审阅为准。 |
评审跟进两处小改:
- `settings.oauthRedirectBaseHelp` 的中英文案仍指引用户去点「修复配置」/
"Fix callback config",而该按钮已改名为「修复开放平台回调」。用户按提示在
界面上找不到这个名字,改为与按钮当前标签逐字一致。
- `extractOpenPlatformRedirectUrls` 里「redirectURL 键缺失 ⟹ 视为空白名单」
这条分支是从服务端「空列表就省略该键」的约定**推断**出来的,而不是读到了
`[]`,且没有回读校验兜底。补一条 info 日志,让约定变更导致的白名单异常
事后能追回到这次推断。
验证:`bun run build` 通过、`tsc --noEmit` 无错;`open-platform-*` /
`setup-open-platform-*` / `feishu-login-manager` /
`dashboard-session-group-tag-repair` / `settings-oauth-redirect-base-ui`
共 5 个文件 204 条用例全绿。探针确认日志只在「键缺失」这一条分支打印,
显式 `[]`、非空列表、以及 `{code:0}` 不可识别三种输入均不打印。
Co-Authored-By: Claude Code <noreply@anthropic.com>
deepcoldy
left a comment
There was a problem hiding this comment.
首审 + 复审均无阻断项,评审提出的两条非阻断建议(回调文案死指引、省略键推断补日志)已直接补在 68e512027。
验证:bun run build / tsc --noEmit 通过;open-platform-* / setup-open-platform-* / feishu-login-manager / dashboard-session-group-tag-repair / settings-oauth-redirect-base-ui 共 5 个文件 204 条用例全绿;对新增守卫做了变异测试,三字段形状校验与 LogoutReason 组合判定均被现有用例钉住。已基于最新 master rebase 复验无冲突,并核对合并树同时保留了双方改动。
CI 必需检查 build 绿;bun-test 腿的单点红为既有问题(plugin-card-action-gateway 在无任何 PR 的 master 提交上以逐字相同的断言失败),该腿 continue-on-error: true 且不在必需状态检查内,与本 PR 无关。
|
🚀 Released in v3.19.1 |
改了什么
error.Code=4101、code=99991641 + error.LogoutReason=40或please log in again。login_required,让 Dashboard 弹出现有扫码框;显式扫码入口强制换新登录态,不再复用被 console 拒绝的旧 Cookie。扫码成功后沿用现有逻辑自动重试修复。safe_setting响应:白名单为空时服务端会省略redirectURL键。只有当allowRefreshToken/ipWhiteList/safeServerDomain三个同级字段都符合真实响应形状时,才将其视为空数组。为什么
真实链路连续命中两个问题:
ask.feishu.cn粗检下仍像是有效的,开放平台/app也能返回 CSRF;但读safe_setting时才返回 HTTP 400 +99991641 / LogoutReason=40 / Code=4101。旧逻辑把它压成单 Bot 的普通failed,Dashboard 无法进入扫码分支。code=0,但因白名单为空而省略redirectURL。旧解析器把这当成「返回体不可识别」,为避免盲写而零写入,随后用户 OAuth 仍然报 20029。安全与影响面
safe_setting形状的缺字段响应仍返回null并零写入。code=99991641不单独触发扫码;用负向用例锁住,避免把普通 console 故障误判成登录过期。UI 文字示意
实际验证
npx -y bun@1.4.0 run build通过(使用仓库钉住的 Bun 1.4.0)。vitest --project unit跑open-platform-*/setup-open-platform-*/feishu-login-manager/dashboard-session-group-tag-repair共 8 个文件,242 条用例全绿。fixed;随后独立回读白名单,期望的 loopback 与 Dashboard OAuth callback 两条地址均已在线,且授权实际使用的redirect_uri与白名单一致。git merge-tree --write-tree origin/master HEAD通过,无冲突。