You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Auth迁移后老用户UID变更致无法访问Firestore数据

老用户登录Firebase认证后UID变更导致Firestore数据无法访问的原因分析

问题背景

用户数据存储在Firestore中,文档ID使用Firebase Authentication的用户UID(通过fAuth.currentUser.uid获取)。旧版Java应用迁移至Kotlin新项目(关联同一Firebase项目)后,新用户正常,但老用户登录后获取的UID与原UID不符,导致Firestore查询返回不存在的快照,最终因访问空数据崩溃。

使用邮箱密码认证,老用户邮箱和密码未变,登录流程正常。新旧项目仅存以下差异:

  • 应用命名空间(package name)变更
  • settings.gradle中的rootProject.name修改
  • 迁移前丢失密钥库并更换了上传密钥

核心原因:签名不一致触发Firebase创建新用户

Firebase邮箱密码认证中,同一邮箱在签名不同的应用下会被视为独立用户,生成不同UID,你的情况里关键触发因素是:

1. 上传密钥更换导致签名哈希不匹配

Firebase依赖应用的签名哈希值关联应用与认证服务。更换上传密钥后,新项目的签名哈希和旧Java项目完全不同。老用户用同一邮箱登录时,Firebase会判定为新用户,自动生成新UID,而非匹配旧用户的原有记录。

2. 应用命名空间变更的间接影响

若你在Firebase控制台为新命名空间单独添加了应用(而非修改旧应用配置),Firebase会将其视为独立应用实例。结合签名哈希的差异,进一步触发了新用户的创建逻辑。

验证步骤

  1. 登录Firebase控制台,进入Authentication > 用户页面,搜索老用户邮箱:
    • 会发现两条用户记录,分别对应旧Java应用和新Kotlin应用的UID
  2. 对比签名哈希:
    • 在项目设置 > 你的应用中,查看新旧应用的签名证书指纹,确认两者不一致

解决方案

1. 恢复旧签名哈希到新项目

若能找回旧密钥库,生成对应签名哈希并添加到Firebase新应用配置:

  • 用keytool生成哈希:keytool -exportcert -list -v -alias <密钥别名> -keystore <旧密钥库路径>
  • 将生成的SHA-1/SHA-256添加到Firebase新应用的签名证书指纹列表中

2. 合并用户数据(旧密钥无法恢复时)

如果旧密钥库彻底丢失,需手动迁移数据:

  • 在Firestore中,将旧UID对应的文档数据复制到新UID的文档中
  • 或修改查询逻辑,通过唯一邮箱字段而非UID查询用户数据

3. 临时修复崩溃问题

在updateUserData方法中补充空值判断,避免空指针:

private suspend fun updateUserData(userSnapshot: DocumentSnapshot?) {
    if (userSnapshot != null && userSnapshot.exists()) { // 增加文档存在性判断
        userDataStore.updateData { user ->
            user.toBuilder()
                .setNombre(userSnapshot.getString(KEY_NOMBRE) ?: "") // 空值兜底
                .setTelefono(userSnapshot.getString(KEY_TELEFONO) ?: "")
                .setEmail(userSnapshot.getString(KEY_EMAIL) ?: "")
                .setToken(userSnapshot.getString(KEY_TOKEN) ?: "")
                .setMesa(userSnapshot.getString(KEY_MESA) ?: "")
                .setIsPresent(userSnapshot.getBoolean(KEY_IS_PRESENT) ?: false)
                .setBonos(userSnapshot.getLong(KEY_BONOS) ?: 0)
                .build()
        }
    }
}

内容的提问来源于stack exchange,提问作者Zaphod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:30:45