Files
dsh_ai1net_server/docs/交接单/接续入口_官方账号登录_20260927.md
T
admin c1b5e4d966 chore(工作区): 全量入库 + 补齐 .gitignore(以工作区为准)
- 变更规模:新增 514 / 修改 62 / 重命名 155 / 删除 4(归档重组与文档轮次)
- .gitignore 修:`归档/**/db-cwd归一-备份-*/` —— 原规则写绝对层级(归档/db-cwd归一-…),
  目录搬进 归档/配置与备份/ 后**静默失效**,43 MB 的 DB 备份又变成未跟踪
- .gitignore 补:嵌套 git 内部数据(归档/内嵌git-20261008/、归档/skills-git-旧线-20261007/dotgit-原样移出/)
- .gitignore 补:运行态与部署副本(.workbuddy/collab/、.workbuddy/tools/、.workbuddy/.load-pending、.workbuddy/tmp-*)
- .gitignore 补:备份件(*.bak-*)
- 未跟踪文件从 2190 降到 890(其余为 归档/ 归档件与 .workbuddy/memory/ 知识文件,按口径入库)
2026-10-10 23:13:22 +08:00

34 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 接续入口 — 官方账号登录(手机连桌面端)· 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`(测试身份设备守护)⑦ ⛔ 本阶段线已收口,**不需要再改插件侧**。