如何让Firestore Authentication换绑新手机号后保留原用户UID
适配方案
因为你当前的集合以用户uid命名且无法批量修改,核心解决思路是建立新旧uid的映射关系,调整查询和换号流程即可:
- 新增独立的映射存储集合
创建一个全局公用的uid_map集合,每条文档存储三个字段:当前认证uid、对应数据集合uid、绑定手机号。用户首次注册时就写入初始数据,此时两个uid值完全一致。 - 修改手机号更换流程
用户换号触发Firebase Auth生成新uid后,不要直接切换本地存储的查询uid,先执行两个操作:- 往
uid_map集合新增一条记录,将新生成的认证uid和旧的集合uid做绑定 - 把绑定后的集合uid持久化存储到本地(如Android的SharedPreferences、Web的LocalStorage)
- 往
- 调整数据查询逻辑
所有用户数据查询前先做优先级判断:优先取本地存储的集合uid作为查询的集合名,如果本地存储不存在,就用当前Auth返回的uid去uid_map集合查询对应的集合uid,再用查询到的结果访问对应集合。 - 新增崩溃兜底逻辑
给所有用户集合查询的接口加异常捕获,一旦触发集合不存在类的报错,主动清空本地存储的集合uid,重新走uid_map查询逻辑,避免本地缓存异常导致的崩溃。
可选优化:如果后续有迭代空间,可以在用户每次写入数据时,同时往新旧两个uid对应的集合写入相同数据,逐步过渡到用新uid作为集合名,降低长期依赖映射逻辑的维护成本。
内容的提问来源于stack exchange,提问作者4xMafole
相关产品推荐
相关产品推荐

