Pārlūkot izejas kodu

docs: record imported student credential recovery and release

彭峰 2 stundas atpakaļ
vecāks
revīzija
d6370a8631

+ 34 - 0
docs/operations/student-import-password-initialization-2026-11-13.md

@@ -0,0 +1,34 @@
+# 旧学员密码初始化与六位学员重置 · 2026-11-13
+
+## 授权与账户处理
+
+用户要求重置此前检查发现的五名学员,并追加孙恺初中,统一使用用户指定的初始密码。通过正式运营接口逐一核对身份和版本后执行重置:
+
+| 学员编号 | 学员 |
+| --- | --- |
+| 1861 | 王依梦高中 |
+| 1865 | 鞠之瑜高中 |
+| 1866 | 鞠州瑜高中 |
+| 1870 | 胡天晨高中 |
+| 1873 | 熊雨欣初三 |
+| 1869 | 孙恺初中 |
+
+六人的正式账号密码登录、`user_get` 资料读取及会话校验全部通过。每人的凭据版本相较本次前像恰好增加一次;旧密码回退关闭,不要求学生再次改密。验收会话均已退出。逐一比较 `legacyUserData`、停用及删除标记,均与前像一致,没有修改课时、学习进度或账号状态。
+
+## 根因与修复
+
+夜间同步的 `directSupplement` 给所有新导入账号设置随机占位密码,并启用一次性旧密码迁移。手工 `backfill-legacy-users.mjs` 的新增账号路径也使用随机密码,未遵循已生效的会员初始密码规则。
+
+两个入口现在共用 `legacyImportPassword`:仅新导入的学员组 1 使用与新建会员相同的初始凭据,明确不要求学生改密,数据库凭据保护保持旧密码回退关闭。老师和门店继续使用各自的随机占位凭据及原有迁移流程。重复同步只核对已有账户,不重置其密码,也不覆盖余额、停用状态或其他新系统数据。
+
+完整登录验收还发现:胡天晨高中和孙恺初中的新系统账号明确为启用,但旧资料 `State=0`,原 `legacyUserAddon` 仍向客户端返回待审核,导致密码验证成功后被拦截。现仅对明确启用的会员,以新系统状态返回可用的登录资料;真正停用的账号继续返回禁用,未明确启用的旧待审核账号继续拦截,老师与门店逻辑不变。未回写或修改这两人的历史状态字段。
+
+## 发布与验证
+
+- 修复提交:`1b612c7`。只替换手机网关 `legacyUserAddon`,其余 295 个函数保留;同步网关只替换 `directSupplement` 并新增共享初始化函数,其余 20 个函数保留。
+- 发布前确认同步空闲,核对源代码前像哈希;发布后两个网关源码完整回读一致。本次没有启动真实全量同步,没有发布前端或执行数据库迁移。
+- 针对性 27 项测试通过,修复前两个新增行为均先复现失败;服务端全量 572 项通过,随后新增的两项手工导入请求规划测试另行通过。11 个云函数定义校验通过,独立代码复核未发现需要修改的问题。
+- 正式环境使用已部署的完整导入源码,向隔离来源提供一个无既有身份或预约/课程/课记引用的测试学员,实际创建账号后以统一初始凭据登录并读取资料成功;旧密码迁移关闭、不要求改密。再次导入创建数为 0,密码及凭据版本保持不变。
+- 测试身份选择在当前用户编号最大值以下的空闲位置,避免影响新会员自动编号;测试账号、会话及本轮余额快照均已清理,核对账号剩余数为 0。验收没有向旧系统写入。
+
+私有账户前像、逐人验证、测试日志、两个网关发布前像及哈希、隔离验收与清理回执位于 `~/.local/state/xiaoshu/qa/2026-11-13-student-import-password/`。密码、密码哈希、令牌和密钥不写入本记录。代码回滚前须核对后续版本;六位学员的密码重置不随代码回滚恢复旧密码。