# 接续入口 — 官方账号登录(手机连桌面端)· 2026-09-27 ## 一句话(当前实况,2026-09-27 第 112 轮) **代码层已全部完成并验证;只剩两步需要人在机器前做**:① 重启桌面客户端(新面板入口与 `/oauth/*` 生效)② 在官方页面点批准。**在那之前,"官方账号"这条链不算端到端通。** ## 已完成(含证据,⛔ 别重做) 1. **死结已定**:官方 OAuth **只接受回环回调**(`http://127.0.0.1:PORT/…`、`http://localhost:PORT/…` 通过;公网域名与官方自身 origin 均被 `code:50005 PAYLOAD_SCHEMA_MISMATCH` 拒)⇒ 服务器与手机浏览器都当不了官方客户端,只能由**桌面端**做。详见 [官方账号登录_死结与结论_20260927.md](E:\ProgramDSH\.dsh\temp\joint\官方账号登录_死结与结论_20260927.md)。 2. **平台侧三跳已上生产**(`D:\github\dsh_shenxian`,线上 md5 `f0490dc44ec8f9ba3d5c9d0605bf886f` 与本地一致): - `POST /api/dsh-oauth/begin`(收 `{redirectUri,state[,pairCode]}` ⇒ 回 `{authorizeUrl}`;**只放行回环**;PKCE verifier 留服务端) - `POST /api/dsh-oauth/complete`(校 `state` 单次有效 ⇒ 用服务端 verifier 调官方 `auth_exchange` ⇒ 官方身份转平台账号:`identityKeyOf`→`platformUsernameOf`→查或建 `role='pending'` ⇒ **带 `pairCode` 时内部调既有 `/api/overlay/pair/approve` 完成绑定**) - 夹具 `test/dsh-oauth.test.mjs`(**8/8 绿**:公网拒/缺参拒/回环起授权且不回显 PKCE 私料/陌生 state 拒/换码拿身份且不许重放/官方 `biz_code≠0` 不回原文/带码绑定成功 `pairBound`/带码绑定失败 409 不夹带凭据);与 `test/dsh-account-login.test.mjs`(10 例)**均已挂进 `npm test`**。 3. **桌面端已落地并接入**(`E:\github\dsh-client\packages\device-shim`): - `lib/oauth-dsh.js`:`GET /oauth/dsh/start`(请平台起授权并 302)+ `GET /oauth/callback`(校 `state`、收码、把 `{code,state,redirectUri[,pairCode]}` 交平台);接入点 `lib/index.js:52/297`。 - `lib/pair-page.js`:面板新增「**用 DSH 官方账号绑定**」入口,出码后自动带上本次 `pairCode`。 - `src/index.ts`:设计说明已同步(本仓 lib/src 手工同步约定)。 4. **可复跑的验证脚本**(全部 rc=0): - 桌面端两路由冒烟 `E:\ProgramDSH\.dsh\temp\joint\oauth-dsh-smoke.mjs` ⇒ **9/9** - 真网络打生产 `…\oauth-dsh-realchain.mjs` ⇒ **302** 到官方授权页并回真 `authorize_id` - 面板渲染 `…\pair-panel-render-check.mjs` ⇒ **7/7**(含新入口、原型令牌在、无自造色板) - 平台侧 `npm run build && node --test test/dsh-oauth.test.mjs test/dsh-account-login.test.mjs` ⇒ **16/16** - 共存门禁(`…\.workbuddy\_devkit`):登记控制台 **30/0**、设备通道 **15/0** 5. **回滚点**:平台 `/opt/dsh/backups/dsh-oauth-bind-1606/`(上一版可执行回退:原样拷回 + 重启 `dshs`);插件侧未 commit ⇒ git 工作区回退。 ## 只剩这两步(需要人操作) 1. **重启桌面客户端**(或在「设置 → 插件」把 device-shim 关掉再开)⇒ 面板入口与 `/oauth/*` 两条路由生效。 2. 设置里打开「扫码配对」→ 出码 → 点「**用 DSH 官方账号绑定**」→ 在官方页面点批准 ⇒ 面板应显示「已绑定」。 随后复核两条验收:**凭据四件与登记控制台产物同形** + **中继里该 uid 设备 `online=true` 且端口含 20090**。 ## 当前可用状态(不受上面阻塞) 门户账号那条路**全通**:面板出码 → 平台 `pending_scan` → 手机登录门户确认 → 桌面落凭据 → 中继在线。想先用它把手机连上,随时可以。 ## ⛔ 不要重做 / 不要再走 ① 别再把官方登录入口挂到门户登录页(浏览器里必然失败,已因此回退)② 别再验"公网回调能否通过"(已证被 `code:50005` 拒)③ 别改官方主程序 `E:\github\dsh-desktop-0.1.7rc2` ④ 别重写平台侧 `dsh-account.ts` 与已完成的 `dsh-oauth.ts` ⑤ 别按 `email` 认领既有平台账号(`dsh-account.ts:38-47` 已判死)⑥ 别动后台作业 `pwsh-470`(测试身份设备守护)⑦ ⛔ 本阶段线已收口,**不需要再改插件侧**。