Firebase Auth 返回一个神秘的不正确的 uid

Posted

技术标签:

【中文标题】Firebase Auth 返回一个神秘的不正确的 uid【英文标题】:Firebase Auth returns a mysterious incorrect uid 【发布时间】:2018-09-18 09:44:01 【问题描述】:

获取当前用户的Firebase Auth doc's recommended way是:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) 
    // User is signed in
 else 
    // No user is signed in

所以我在第一次活动开始时就这样做了:

override fun onCreate(savedInstanceState: Bundle?) 
        Log.d(TAG, "⟳ onCreate")
        super.onCreate(savedInstanceState)

        if (FirebaseAuth.getInstance().currentUser == null) 
            Log.d(TAG, "User is null. Sending user to log in.")
            val intent = Intent(this, FacebookLoginActivity::class.java)
            startActivity(intent)
            finish()
         else 
            Log.d(TAG, "User has been found. Launching MainActivity")
            val intent = Intent(this, MainActivity::class.java)
            startActivity(intent)
            finish()
        
    

但这就是奇怪的事情开始发生的时候????

步骤:

    我从内存中删除了应用程序 删除所有数据和缓存

    卸载并再次安装,然后启动

    实际:FirebaseAuth.getInstance().currentUser 不为空!好吧,猜测 Firebase 库正在尝试做一些聪明的事情并找出我以前的登录历史,但是:

    它返回的 uid 不是我的用户 ID。我无法使用它,因为我已经在我的数据库中保存了该用户的数据,并且之前为该用户返回了另一个合法的 uid。 我找不到这个 uid https://console.firebase.google.com/u/0/project/.../authentication/users这怎么可能? 此 uid 多次弹出导致我出错,并且始终是相同的流氓 uid。

我检查了几件事:

FirebaseAuth.getInstance().currentUser.providerData 显示这个 uid 与我的 Facebook 帐户相关联,所以我 必须以前用它登录过。 (我在下一个活动中调用FacebookAuthProvider.getCredential(...))但是我的真实合法uid 也应该与我感兴趣的Facebook 帐户相关联。

FirebaseAuth.getInstance().currentUser.isAnonymous 返回 false,所以 问题可能与匿名登录无关

如何从系统中清除这个“幻影”流氓用户 ID? 我该如何检查?我不想每次用户打开应用时都调用FacebookAuthProvider.getCredential(...)

(使用 'firebase-auth:12.0.1')

【问题讨论】:

您是否还要从 Firebase 控制台中删除用户? @AlexMamo 是的,有时我会在测试时删除控制台上的用户。我不能确定我是否删除了这个用户。 【参考方案1】:

我遇到了和你一样的问题。我在 android 设备上使用颤振。 这是我尝试过的:

    清除应用的缓存。 删除应用程序。 重启手机。 重新安装应用。

然后,FirebaseAuth.getInstance().getCurrentUser() 将不再持有该值。

例如在我的应用程序中,我使用了firestore,由于无效的userId(它取决于安全规则),它在访问firestore 资源时会抛出权限错误。你可以让你的应用程序防御性地要求用户再次登录。或者你可以做firebaseUser.reload()它会抛出userId无效异常。

FirebaseAuth.getInstance().getCurrentUser() 会在重启前保持该值的真正原因仍然未知。

【讨论】:

【参考方案2】:

如果您的应用程序中有一个用户,并且您决定从Firebase Console 中删除其帐户,您需要知道,如果同样返回再次使用您的应用程序,则会生成另一个uid ,这显然与第一个不同。因此,即使该用户在被删除之前具有相同的详细信息(用户名、电子邮件地址等),也会被视为具有new uid 的新用户。

【讨论】:

这很清楚。在这种情况下,sdk 永远不应返回旧的“已删除”uid,而是“新 uid”。我在 Firebase 控制台上找不到 SDK 返回的 uid。在强制 SDK 将我的 Facebook 令牌交换为 Firebase uid 后,我得到了 Firebase 控制台上列出的正确 uid。 我明白了。你觉得我的回答对你有帮助吗? 我非常感谢您的回答,尽管它不是答案或导致我深入调查的东西。

以上是关于Firebase Auth 返回一个神秘的不正确的 uid的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Auth ID 令牌的“aud”声明不正确

Firebase Auth 密码重置:如何正确发送包含确认码的密码重置电子邮件?

有时 firebase.auth().onAuthStateChanged 在我刷新页面时返回 null 用户

Firebase_auth photoURL 不起作用。返回默认人物图像

刷新后,firebase Auth当前用户返回null

如何使用firebase auth android无法返回android