student-import-password-initialization-2026-11-13.md 3.5 KB

旧学员密码初始化与六位学员重置 · 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/。密码、密码哈希、令牌和密钥不写入本记录。代码回滚前须核对后续版本;六位学员的密码重置不随代码回滚恢复旧密码。