2017-05-17 157 views
1

我試圖啓用「多個帳戶每個電子郵件地址」,但我不確定它是如何工作的。 fetchProvidersForEmail()似乎返回意外的結果。Firebase身份驗證Android fetchProvidersForEmail()錯誤?

我有以下代碼。

firebaseAuth.fetchProvidersForEmail("email").addOnCompleteListener(new OnCompleteListener<ProviderQueryResult>() { 
    @Override 
    public void onComplete(@NonNull Task<ProviderQueryResult> task) { 
     if (task.isSuccessful()) { 
      List<String> providers = task.getResult().getProviders(); 
      if (providers != null) { 
       Timber.d(providers.toString()); 
      } else { 
       Timber.d("provider null"); 
      } 
     } else { 
      Timber.d("task fail"); 
     } 
    } 
}); 

方案1

  1. 默認情況下,在與谷歌的用戶。 fetchProvidersForEmail()返回[google.com]
  2. 啓用「每個電子郵件地址有多個帳戶」。 fetchProvidersForEmail()返回[]
  3. 禁用「每個電子郵件地址有多個帳戶」。 fetchProvidersForEmail()再次返回[google.com]

方案2

  1. 啓用 「每個電子郵件地址多個帳戶」。首先使用電子郵件/密碼登錄用戶。
  2. fetchProvidersForEmail()返回[password]
  3. 使用Google登錄用戶。 fetchProvidersForEmail()仍然只返回[password]
  4. 禁用「每個電子郵件地址有多個帳戶」。 fetchProvidersForEmail()現在只返回[google.com]

結論

  1. 當 「每個電子郵件地址多個帳戶」 未啓用,[google.com]正確返回。當「啓用多個帳戶每個電子郵件地址」時,還會優先創建電子郵件/密碼。
  2. 當啓用「每個電子郵件地址的多個帳戶」時,[password]已正確返回。永遠不會返回[google.com]

這實際上是正確的行爲嗎?

回答

0

由於Google帳戶已被Firebase驗證,因此Google登錄具有優先於其他auth提供者方法的優先權。

但是,如果啓用了多個帳戶,則會返回與電子郵件關聯的第一個登錄方法。