2016-07-27 9 views
12

Ich verwende Firebase von Google und ich habe einige Probleme mit der Benutzerauthentifizierung. Nach dem Einloggen mit Facebook erhalte ich FirebaseUser in AuthStateListener, aber wie kann ich feststellen, ob dieser Benutzer über Facebook oder anders angemeldet ist?So ermitteln Sie, ob ein Firebase-Benutzer mit Facebook-Authentifizierung angemeldet ist

UPDATE Wie @Frank van Puffelen sagte FirebaseAuth.getInstance(). GetCurrentUser(). GetProviderId() sollte "facebook" zurück, aber in meinem Fall gibt es "Firebase". Jetzt kann ich nicht herausfinden, was der Grund für dieses Verhalten ist. Als ich FacebookToken bekam ich so etwas wie dieses:

 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()) { 

         } 

        } 
       }); 

Und vor onComplete Afterthat() -Methode aufgerufen wird, mein AuthStateListener bekommt Benutzer, die Anbieter-ID ist nicht „facebook“, wie es sein sollte. Mache ich etwas falsch? Ich folgte offiziellen Google documentation

+0

ich glaube, dass FirebaseUser.getProviderId() gibt „facebook.com“ aber ich kann es nicht testen, da mein App nicht Facebook nicht verwendet. Vielleicht versuchen Sie es, wenn Sie könnten? –

+0

Schauen Sie sich bitte meine aktualisierte Frage an. – Taldakus

Antwort

28

In Version 3.x und höher kann ein einzelner Benutzer bei mehreren Anbietern angemeldet werden. Daher gibt es nicht mehr das Konzept einer einzelnen Anbieter-ID. In der Tat, wenn Sie anrufen:

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

Es wird immer firebase zurück.

Um festzustellen, ob der Benutzer mit Facebook unterzeichnet wurde, werden Sie die Provider-Daten überprüfen müssen:

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

Leider gibt getProviderId() in meinem Fall "Firebase" zurück. Ich werde meine Frage aktualisieren, wäre toll, wenn Sie einen Blick darauf werfen könnten. – Taldakus

+2

Der Code in Ihrem Update macht genau das, was die erste Hälfte meiner Antwort erklärt. Haben Sie die Schleife in meinem zweiten Code-Schnipsel verwendet? Die erste 'UserInfo' wird in der Tat die Provider-ID' firebase' haben (wie für den zusammengeschlossenen Benutzer). Aber der zweite in meinen Tests hatte 'google.com' (ich benutzte den Google-Provider). –

+0

Natürlich haben Sie Recht! Ich habe einen einfachen Fehler gemacht ... Vielen Dank, Mann. – Taldakus

3

In meinem app i Anonymous Firebase-Konto verwenden, und wenn ich eine Verbindung Feuerbasis Auth mit Facebook-Konto oder Google-Konto i wie folgt bin Überprüfung,

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"); 
      } 

} 
Verwandte Themen