Firebase Auth返回一个神秘的错误uid

时间:2018-04-09 04:04:27

标签: android firebase kotlin firebase-authentication

获取当前用户的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 https://console.firebase.google.com/u/0/project/.../authentication/users这怎么可能?
    • 这个uid在不同的时间突然出现,导致我的错误,而且总是这个流氓uid。
  4. 我检查了几件事:

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

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

    • 无关

    我如何清除这个"幻像"来自系统的流氓用户ID? 我该如何检查?每次用户打开应用时,我都不想致电FacebookAuthProvider.getCredential(...)

    (使用' firebase-auth:12.0.1')

2 个答案:

答案 0 :(得分:1)

如果您的用户与您的应用分开,并且您决定从Firebase Console删除其帐户,则需要知道如果相同的用户再次使用您的应用,则另一个{{1生成,这显然与第一个不同。因此,即使该用户在删除之前具有相同的详细信息(userName,emailAddress等),也会被视为具有uid的新用户。

答案 1 :(得分:0)

我遇到了与您相同的问题。我正在Android设备上使用Flutter。 这是我尝试过的:

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

然后,FirebaseAuth.getInstance().getCurrentUser()将不再保存该值。

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

FirebaseAuth.getInstance().getCurrentUser()将在重启前保留该值的实际原因仍然未知。