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的主要内容,如果未能解决你的问题,请参考以下文章