Firebase身份验证Android fetchProvidersForEmail()错误?

时间:2017-05-17 13:08:11

标签: android firebase firebase-authentication

我尝试启用"每个电子邮件地址的多个帐户",但我不确定它是如何工作的。 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. 默认情况下,使用Google登录用户。 fetchProvidersForEmail()返回[google.com]
  2. 启用&#34;每个电子邮件地址多个帐户&#34;。 fetchProvidersForEmail()返回[]
  3. 禁用&#34;每个电子邮件地址多个帐户&#34;。 fetchProvidersForEmail()再次返回[google.com]
  4. 场景2

    1. 启用&#34;每个电子邮件地址多个帐户&#34;。首先使用电子邮件/密码登录用户。
    2. fetchProvidersForEmail()返回[password]
    3. 使用Google登录用户。 fetchProvidersForEmail()仍然只返回[password]
    4. 禁用&#34;每个电子邮件地址多个帐户&#34;。 fetchProvidersForEmail()现在仅返回[google.com]
    5. 结论

      1. 当&#34;每个电子邮件地址多个帐户&#34;未启用,正确返回[google.com]。它还具有电子邮件/密码的优先级,该电子邮件/密码是在&#34;每个电子邮件地址的多个帐户&#34;已启用。
      2. 当&#34;每个电子邮件地址多个帐户&#34;已启用,正确返回[password]。永远不会返回[google.com]
      3. 这实际上是正确的行为吗?

1 个答案:

答案 0 :(得分:0)

Google登录优先于其他身份验证提供商方法,因为Google帐户已被Firebase视为已验证。

但是,如果启用了多个帐户,则会返回与该电子邮件关联的第一个登录方法。