云盘自动连接恢复(2026-10-26)¶
现场¶
原 dev 的设备本地授权为 acknowledged/cloud/oh 全部 true,云盘配置文件不存在。学校 Learn 会话恢复成功;云盘的直连 profile 链连续落到 ID 登录表单,旧静默连接只处理 checkSingle,不处理已有学校登录但缺少直连 ID 会话的场景。当前证据不能确定此前是哪次登出移除了配置文件,因此没有把文件缺失归因于权限开关。
CLI 恢复路径还会用后台快照完整替换 native Cookie 仓;同账号在 GUI 中后来建立、而后台尚未收录的直连云盘会话会随替换丢失。
修补¶
- 静默连接先等待设备授权初始化及持久化云盘配置读取,避免把尚未加载当作未配置。
- 先验证已保存令牌,网络故障保留凭据;确认为 401/403 才尝试重新发现现有令牌。
- 多个启动入口共享一个连接流程。已登录的同账号可复用内存凭据与设备信任,最多续接一次直连认证;遇到二次认证返回提示,不循环提交。
InfoClient.ensureDirectIdLogin增加可选consumeServiceTicket。云盘明确兑付本次认证产生的 OAuth 回调,再读取现有令牌;默认行为保持原状,TUOJ 等已有调用不变。仅建立 ID 会话、然后重新发起 profile,实测仍可回到登录表单。- 每个异步阶段核对 native epoch、学校账号、云盘 credential version 和授权,阻止登出、换号后的旧响应重新接回。
- CLI 恢复只有在持久化 GUI 账号与已验证后台账号一致时,保留后台缺少的直连学校服务 Cookie。重叠 Cookie 与 WebVPN 控制 Cookie 以后台为准;换号、登出、未知归属均不合并。
- 未修改云盘授权和 CLI 的逐次确认策略;没有新建或删除云端资料库。
验证¶
- 真实原 dev:自动获得现有访问令牌,原生 account 读取成功、资料库列表读取成功,共 13 个。日志仅记录布尔值和数量,未记录令牌或文件内容。
- 云盘生命周期 30 项、私有会话交接 8 项、共享运行时 21 项、CAS 信任与服务回调 8 项通过。
- 桌面 TypeScript 检查、生产构建(含 7649 键 i18n 检查)通过。移除临时探针后重启原 dev,学校会话正常恢复、云盘配置持续保留,未重新要求登录。
- 临时实测探针已经从源码移除,不进入交付。
保留的边界¶
没有已保存云盘令牌、也没有当前已登录账号的内存凭据时,继续使用原来的窗口连接入口。学校明确要求新的二次认证时,需要在正常账号认证流程完成;恢复逻辑不代填验证码或新建信任设备。