【问题标题】:Firebase Auth returns a mysterious incorrect uidFirebase Auth 返回一个神秘的不正确的 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()
        }
    }

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

步骤:

  1. 我从内存中删除了应用程序
  2. 删除所有数据和缓存
  3. 卸载并再次安装,然后启动

    实际: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 是的,有时我会在测试时删除控制台上的用户。我不能确定我是否删除了这个用户。

标签: android firebase kotlin firebase-authentication


【解决方案1】:

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

  1. 清除应用的缓存。
  2. 删除应用程序。
  3. 重启手机。
  4. 重新安装应用。

然后,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。
    • 我明白了。你觉得我的回答对你有帮助吗?
    • 我非常感谢您的回答,尽管它不是答案或导致我深入调查的东西。
    猜你喜欢
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 2019-12-01
    • 2011-03-03
    • 2015-03-11
    • 1970-01-01
    • 2018-01-02
    相关资源
    最近更新 更多