簡體   English   中英

在 Firebase Auth 中,如何檢測匿名用戶已升級為例如 Facebook 用戶?

[英]In Firebase Auth, how to detect that an anonymous user was UPGRADED to an e.g. Facebook user?

我在我的 Android 應用程序中有一個 singleton,在應用程序啟動時開始,它監聽身份驗證 state 變化如下:

fun listenForAuthChanges() {
    if (authStateListener != null) {
        FirebaseAuth.getInstance().removeAuthStateListener(authStateListener!!)
    }
    authStateListener = FirebaseAuth.AuthStateListener { auth ->
        val user = auth.currentUser
        writeStatusToFirebase()
        if (user != null) {
            Log.debug("User : ${user.uid} -> ${user.loginType}")
        } else {
            Log.debug("User : signed out")
            loginAnonymously()
        }
    }
    FirebaseAuth.getInstance().addAuthStateListener(authStateListener!!)
}

這非常有效,可以檢測用戶是否已注銷或登錄。正如您在上面的代碼中使用 loginAnonymously() 所看到的,當沒有用戶登錄時,我會自動匿名登錄。 然而,這就像一個魅力......當我調用 Firebase-UI 登錄並且用戶通過 Facebook 登錄時,不會調用 Auth state 監聽器。

我發現 FirebaseUI 實際上並沒有創建新用戶,而是將匿名用戶升級為 Facebook 用戶(在 Firebase Auth 控制台中檢查並在 ZE84E30B9390CDB64DB6DB2C9AB8 控制台中使用斷點) 這實際上是我想要的行為。

所以我猜,結論是因為用戶的uid沒有改變,所以沒有調用Auth state監聽器?

但是,我確實需要一種可靠的方法來檢測此事件(意味着用戶從匿名升級到例如 Facebook)。

最好的方法是什么?

注意:我知道可以檢測用戶使用什么身份驗證提供程序 (id) 進行身份驗證。 這是我用於此的一些代碼:

val FirebaseUser.loginType: LoginType

get() {
    if (isAnonymous) {
        return LoginType.Anonymous
    }
loop@ for (userInfo in providerData) {
    when (userInfo.providerId) {
        EmailAuthProvider.PROVIDER_ID -> return LoginType.Email
        GoogleAuthProvider.PROVIDER_ID -> return LoginType.Google
        FacebookAuthProvider.PROVIDER_ID -> return LoginType.Facebook
        else -> continue@loop
    }
}
return LoginType.Unknown

}

這不是我的問題,我的問題是:如何檢測用戶已從匿名升級到例如 Facebook?

如何檢測用戶已從匿名升級到例如 Facebook?

匿名用戶首次登錄時,將認證類型保存在數據庫中:

Firestore-root
  |
  --- users (collection)
        |
        --- uid
             |
             --- type: "anonymous"

當用戶更改身份驗證類型時,您只需將數據庫中的type字段更改為保存“Facebook”而不是“匿名”。 這是可能的,因為無論提供者 id 是什么, uid總是相同的。 要在操作發生時收到通知,只需在type屬性上附加一個偵聽器,您就會收到實時通知。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM