簡體   English   中英

如何確定用戶是使用電子郵件和密碼登錄 Firebase 還是使用 google 登錄?

[英]How to determine if the user signed in to Firebase with email and password or with google sign in?

我正在登錄 Web 應用程序,並且我已經做到了,因此用戶可以使用他們的電子郵件和密碼手動登錄或使用谷歌登錄。有沒有辦法確定他們使用的方法? 最好使用 Firebase 身份驗證狀態更改功能。

`firebase.auth().onAuthStateChanged(firebaseUser => {....`

我知道當您進入 Firebase 控制台日志時,您可以知道他們是如何登錄的,但是有沒有辦法使用 JavaScript 代碼來確定它?

使用firebase.auth().currentUser.providerData 在此處輸入圖片說明

@mjrdnk 的回答是正確的,但有一個警告,一個用戶可以鏈接多個提供者。 因此,使用firebase.auth().currentUser.providerData[0].providerId將始終產生相同的提供者,即使使用另一個鏈接的提供者登錄。確定用於簽名的當前提供者的最准確方法是檢查 ID令牌的字段: firebase.sign_in_provider

您可以通過使用 currentUserhttps://firebase.google.com/docs/reference/js/firebase.UserInfo來確定

像這樣:

firebase.auth().currentUser.providerData[0].providerId

希望這會有所幫助。

目前@mjdnk asnwer 已棄用,因為它將始終提供第一個提供者而不是最后一個登錄的提供者。

所以最近的解決方案是:

正如這里所指出的

var uiConfig = {
        callbacks: {
          signInSuccessWithAuthResult: function(authResult, redirectUrl) {
            var providerId = authResult.additionalUserInfo.providerId;
            localStorage.setItem("firebaseProviderId", providerId)
            //...
          },
          //..
       }

並在頁面中顯示

firebase.auth().onAuthStateChanged(function (user) {
      if (user) {
        user.getIdToken().then(function (idToken) {

          $('#user').text(welcomeName + "(" + localStorage.getItem("firebaseProviderId")+ ")");
          $('#logged-in').show();
        }
    }
});

@mjrdnk 的答案是正確的,但有些情況未涵蓋在答案中,因此我發現此解決方案在所有情況下(我已經測試過)都效果最佳。

val user = firebaseAuth.currentUser

        user?.let {

        authProvider = when (it.providerData[it.providerData.size-1].providerId) {
            "phone" -> {
                ConnectedUser.LOGIN_PROVIDERS.PHONE
            }
            "password" -> {
                // Email and password
                ConnectedUser.LOGIN_PROVIDERS.EMAIL
            }
            else -> {
                ConnectedUser.LOGIN_PROVIDERS.UNKNOWN
            }
        }
.
.
.

精彩的信息來源:FirebaseUI for Auth

一些提供程序名稱如下(有關更多信息,請參見上面的源代碼):

ANONYMOUS_PROVIDER = "anonymous"
EMAIL_LINK_SIGN_IN_METHOD = "emailLink"
EMAIL_PASSWORD_SIGN_IN_METHOD = "password"
MICROSOFT_PROVIDER = "microsoft.com"
YAHOO_PROVIDER = "yahoo.com"
APPLE_PROVIDER = "apple.com"
PHONE = "phone"

暫無
暫無

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

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