fix(oauth): 本地 CPA 场景下强制执行 Step 9,并修复 Step 8 Stop 中断#20
Conversation
|
感谢补充这个修复。 这里有一个点需要先确认清楚:你这次把 这一点和当前主分支已经采用的设计是冲突的:当前逻辑认为本地 CPA 场景下,Step 8 已经拿到有效 callback 时,可以直接完成,不再重复提交 Step 9。 因为这边目前不使用本地 CPA,所以没法直接验证到底是哪种行为更正确。想请你补充一下:
另外, 我这边先等你补充这个设计依据,再决定这部分是否合并。 |
|
1) 我这边复现到的具体场景是什么?
我复现到的是代码路径级复现,不是某个真实本地 CPA 面板的现场日志。
在 userfork/master / master 里:
- master:background.js:251
- master:background.js:2912-2916
只要状态满足:
- vpsUrl = http://127.0.0.1:8317/management.html#/oauth
- localhostUrl = http://127.0.0.1:8317/codex/callback?code=abc&state=xyz
那么 executeStep9() 会直接短路,不打开 CPA 面板,直接:
log: 步骤 9:检测到本地 CPA,步骤 8 完成后已自动添加,无需重复提交回调地址。
event: completeStepFromBackground(9, { verifiedStatus: 'local-auto' })
而改动后的分支路径是:
log: 步骤 9:正在打开 CPA 面板...
log: 步骤 9:正在填写回调地址...
event: sendToContentScriptResilient('vps-panel', step 9, ...)
也就是说,我能确定复现的是:
- 主分支在“本地 CPA + 已拿到 callback”时,Step 9 根本不会执行
- 这会让扩展直接把 Step 9 判完成
2) 为什么本地 CPA 场景下,Step 8 拿到 callback 后还不能算完成?
从你项目当前实现语义看,Step 8 和 Step 9 职责不同:
- Step 8:拿到真实 callback URL
- Step 9:把 callback URL 回填到 CPA 面板,并等待面板出现 认证成功!
证据在 content/vps-panel.js:325-387:
- fillInput(urlInput, localhostUrl) content/vps-panel.js:362
- simulateClick(submitBtn) content/vps-panel.js:382
- waitForExactSuccessBadge() content/vps-panel.js:385
- reportComplete(9, ...) content/vps-panel.js:387
所以CPA 面板部署在 localhost 和CPA 面板会自动消费 callback,无需 Step 9 提交其实不是一回事。
3) 如果跳过 Step 9,会出现什么实际问题?
已确定的直接后果:
- 扩展会把 Step 9 标记为完成
- vps-panel.js 不会执行
- 不会检查 CPA 面板是否真的显示 认证成功!
推断出来的风险(这部分需要真实本地面板验证):
- 如果你的本地 CPA 仍然是“需要把 callback 粘进去再点提交”的实现,
- 那就会出现 扩展判成功,但面板其实还没确认成功 的“假完成”。
4) 这个现象是通用行为,还是只针对某个本地 CPA 实现?
按当前仓库证据,不能下结论说它是通用行为。
更准确的说法应该是:
- 对于本地部署但仍保留 Step 9 提交式确认的 CPA,这个 bypass 是有问题的
- 但如果某些本地 CPA 在 callback 命中后就会自动落库并直接显示成功,那原本的 bypass 逻辑未必错
所以这次改成恒 false,更像是一个保守策略变更,不是一个已经被充分证明的“通用 bug 修复”。
jsidfhji
***@***.***
|
|
感谢补充说明,也感谢把这两个点一起提出来。 这边已经先把 至于“本地地址的 CPA 是否应该强制执行 Step 9,不再跳过”这部分,我这边会再继续测试和分析,确认本地地址场景下 callback 的实际消费方式之后,再决定最终应该采用哪种策略。 也就是说,这一块我暂时先不按通用 bug 直接合并,等把本地回调路径和面板确认方式验证清楚再定。 |
|
????? ?????????????????????? CPA ?????????????????????????????????????? CPA ??? Step 9??????????9???????? ????????? PR ?????????????????????????????????? |
变更说明
localhost/127.0.0.1)场景下,Step 8 捕获 callback 后 Step 9 被直接跳过的问题;现在仍会回到 CPA 面板填写回调 URL 并点击提交chrome.debugger点击链路在收到 Stop 后仍继续发送鼠标事件的问题tests/step9-cpa-mode.test.js的回归预期验证
node tests\\step8-callback-handling.test.jsnode tests\\step8-debugger-stop.test.jsnode tests\\step8-state-timeout-retry.test.jsnode tests\\step8-stop-cleanup.test.jsnode tests\\step9-cpa-mode.test.jsnode tests\\step9-localhost-cleanup-scope.test.js