2016-07-27 80 views
12

我正在使用来自google的firebase,并且我在用户身份验证方面遇到了一些问题。在使用Facebook登录后,我在AuthStateListener中获取了FirebaseUser,但是如何检测此用户是通过Facebook还是以不同方式登录?如何确定Firebase用户是否使用Facebook身份验证登录

UPDATE 作为@Frank面包车Puffelen说FirebaseAuth.getInstance()。getCurrentUser()。getProviderId() 应该返回 “脸谱”,但在我的情况下,它会返回 “火力点”。现在我无法弄清楚这是什么原因。当我FacebookToken我做这样的事情:

 AuthCredential credential = FacebookAuthProvider.getCredential(facebookToken.getToken()); 
     mAuth.signInWithCredential(credential) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 

         // If sign in fails, display a message to the user. If sign in succeeds 
         // the auth state listener will be notified and logic to handle the 
         // signed in user can be handled in the listener. 
         if (!task.isSuccessful()) { 

         } 

        } 
       }); 

而且afterthat叫的onComplete()方法之前,我AuthStateListener获取用户,其供应商ID是不是“脸谱”理所应当的。难道我做错了什么?我遵循官方谷歌documentation

+0

我相信FirebaseUser.getProviderId()将返回“facebook.com”,但我无法测试它,因为我的应用程序不使用Facebook。如果可以的话,也许试试吧? –

+0

请看我的更新问题。 – Taldakus

回答

28

在版本3.x和更高版本中,单个用户可以登录与多个提供商。因此,不再有单一供应商ID的概念。其实当你拨打电话:

FirebaseAuth.getInstance().getCurrentUser().getProviderId() 

它总是会返回firebase

要检测如果用户与Facebook登录,你将有权检查供应商的数据:

for (UserInfo user: FirebaseAuth.getInstance().getCurrentUser().getProviderData()) { 
    if (user.getProviderId().equals("facebook.com")) { 
    System.out.println("User is signed in with Facebook"); 
    } 
} 
+0

不幸的是getProviderId()在我的情况下返回“firebase”。我会更新我的问题,如果你能看一看,会很棒。 – Taldakus

+2

更新中的代码恰恰是我的答案的前半部分所解释的。你有没有在我的第二个片段中使用循环?第一个'UserInfo'的确有提供者ID'firebase'(就像合并用户一样)。但是,我的测试中的第二个有'google.com'(我使用Google提供商)。 –

+0

当然你是对的!我犯了一个简单的错误......非常感谢。 – Taldakus

3

在我的应用我使用匿名火力地堡帐户,当我连接火力权威性与Facebook帐户或Google帐户我正在检查如下,

for (UserInfo user: FirebaseAuth.getInstance().getCurrentUser().getProviderData()) { 

      if (user.getProviderId().equals("facebook.com")) { 
       //For linked facebook account 
       Log.d("xx_xx_provider_info", "User is signed in with Facebook"); 


      } else if (user.getProviderId().equals("google.com")) { 
       //For linked Google account 
       Log.d("xx_xx_provider_info", "User is signed in with Google"); 
      } 

} 
相关问题