Skip to content

fix(dashboard): 编辑连接器换密钥后回显新令牌(只显示一次) - #783

Merged
deepcoldy merged 2 commits into
masterfrom
fix/connector-edit-show-rotated-token
Aug 7, 2026
Merged

fix(dashboard): 编辑连接器换密钥后回显新令牌(只显示一次)#783
deepcoldy merged 2 commits into
masterfrom
fix/connector-edit-show-rotated-token

Conversation

@deepcoldy

@deepcoldy deepcoldy commented Aug 7, 2026

Copy link
Copy Markdown
Owner

问题

Dashboard 编辑 webhook 连接器时,如果在「密钥」框里填新值想换 token:后端确实会替换密钥、并返回新 token + 新 webhookUrl,但前端编辑成功分支直接丢弃了返回值,只弹一句「已更新」就关掉表单。

token 模式下新 token 只在这一刻返回一次,用户无从获取 → 连接器再也无法触发。表现上就像「配置密钥坏了」。

修复

1. 编辑换密钥后回显新令牌

编辑成功且本次改了密钥时,复用新建连接器那套一次性面板展示新令牌 + 新 webhookUrl

  • 触发条件 const rotatedSecret = r.body.secret ?? body.secret
    • body.secret:用户在编辑框手填的新密钥(当前 UI 的主路径,后端此路径只回 webhookUrl 不回 secret
    • r.body.secret:后端自动轮换(rotateSecret:true)时返回
    • 两条路都能正确回显,token 模式 URL 已含新 token
  • 保持 editingConnector,弹面板期间标题仍是「编辑」,closeCreateModal 关闭时清理
  • 未改密钥的普通编辑仍按原逻辑保存并关闭,行为不变
  • 新增 connectors.rotatedPrefix 文案(中/英),面板标题区分「已更新」vs「已创建」

2. 一次性凭证面板隐藏「取消」按钮

成功态复用的凭证面板此时后端已提交,共用 footer 却同时显示「取消」和「关闭」,两者都只执行 closeCreateModal。「取消」并不会回滚密钥,点下后一次性 token 立即消失、列表退回 <token> 占位符且无法恢复——会换一个入口再次造成永久凭证丢失。

  • created 为真时只渲染「关闭」,不再渲染「取消」
  • 该 footer 为新建/编辑共用路径,一处修改同时覆盖「新建成功」与「编辑换密钥成功」两条路(该问题在新建成功路径此前即已存在)

验证

  • pnpm buildtsc + dashboard:bundle)✅
  • connector 相关单测 3 files、23/23 ✅
  • 隔离 Dashboard 浏览器复现:编辑换密钥后新 URL + 一次性 token 正确显示;成功态仅剩「关闭」按钮,控制台无 JS error

影响面

仅 Dashboard 前端 connectors 页 + i18n 文案,后端接口与鉴权逻辑未改动。

编辑 webhook 连接器时若修改密钥/令牌,前端编辑分支直接丢弃了后端
返回的新令牌,只弹「已更新」就关闭表单。token 模式下新令牌只会
返回一次,用户无从获取,连接器再也无法触发。

改为:本次改了密钥(用户手填 body.secret 或后端自动轮换返回
r.body.secret)时,复用新建连接器那套一次性面板展示新令牌 + 新
webhookUrl,并保持编辑态标题。新增 rotatedPrefix 文案(中/英)。

未改密钥的普通编辑仍按原逻辑保存并关闭。
@deepcoldy

Copy link
Copy Markdown
Owner Author

复核记录(head 6b004e2

结论:发现 1 个 UX blocker,当前不建议合并。

[P2] 凭证已提交成功后仍显示“取消”,会再次造成一次性 token 丢失

复现路径:编辑 token 模式连接器 → 填新密钥 → 保存成功。此时 PUT 已完成、服务端密钥已经替换,但一次性凭证面板的 footer 同时显示“取消”和“关闭”,两者都调用 closeCreateModal;“取消”并不会回滚,只会关闭面板。关闭后列表仅显示 /\<令牌\> 占位符,重新编辑时密钥仍为空,新 token 无法恢复。

这会让用户把“取消”理解为撤销轮换,从而再次踩中本 PR 想修复的凭证永久丢失问题。

建议:created 为真时不要渲染“取消”,只保留明确的“关闭”按钮。该 footer 为共用路径,一处修改即可同时覆盖新建成功与编辑换密钥成功两种面板。

已验证

  • pnpm build:通过(domain audit、tsc、dashboard bundle、dist audit)。
  • pnpm exec vitest run --project unit test/connector-api.test.ts test/dashboard-connectors.test.ts test/connector-store.test.ts:3 files、23/23 tests 通过。
  • 隔离 Dashboard 浏览器验证:
    • 密钥留空的普通编辑仍关闭弹窗并显示“已保存全部配置”;
    • 手填新密钥时,按真实 PUT 契约(响应仅回 webhookUrl、不回 secret)能展示新 URL 与一次性 token;
    • 点击成功态的“取消”后,一次性 token 消失且无法从列表/重开编辑恢复;重复复现稳定,控制台无 JS error。

影响面

代码改动本身仅涉及 Dashboard connector 页面与中英文文案;本 blocker 位于 connector 新建/编辑共用的成功态 footer。后端接口、鉴权、其它 CLI、PTY/Tmux、普通/恢复会话路径未改动。

合并前材料

  • 这是 UI 改动,请在 PR 描述附一次性凭证成功态截图。
  • 公开描述请改为中性客观表述,删除群内身份信息与内部协作过程。
  • 建议为 created 成功态 footer 补一条自动化回归,锁定只显示“关闭”。

成功态复用的凭证面板此时后端已提交,「取消」不会回滚密钥,
点下只会关掉仅显示一次的新令牌导致永久丢失,与「关闭」行为相同
却带误导语义。created 为真时只渲染「关闭」;该 footer 为新建/编辑
共用路径,一处修改同时覆盖新建成功与编辑换密钥成功两条路。
@deepcoldy

Copy link
Copy Markdown
Owner Author

新 HEAD ff6cb8617 验证记录:

  • 一次性凭证成功态的共用 footer 已改为仅渲染「关闭」;「取消」只存在于尚未提交的表单态。
  • 隔离 Dashboard 分别走通「新建 token webhook」和「编辑并更换密钥」两条路径:两种成功态均正确展示一次性 token / webhook URL,且仅有「关闭」操作。
  • 浏览器控制台与 page errors 均为空。
  • pnpm build 通过。
  • pnpm exec vitest run --project unit test/connector-api.test.ts test/dashboard-connectors.test.ts test/connector-store.test.ts 通过(3 files,23/23)。
  • 新 HEAD 的 GitHub checks 全部通过(build、CodeQL、Advanced Security、actions/js/python analyze)。

当前未发现代码层面的阻塞项。建议后续补一条成功态 footer 的自动化回归用例,固定「成功态不显示取消」这一约束;不影响本次结论。

@deepcoldy
deepcoldy merged commit c7a2906 into master Aug 7, 2026
6 checks passed
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown

🚀 Released in v3.11.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant