webentwicklung-frage-antwort-db.com.de

So stellen Sie fest, ob ein Firebase-Benutzer mit der Facebook-Authentifizierung angemeldet ist

Ich benutze Firebase von Google und habe Probleme mit der Benutzerauthentifizierung. Nach dem Einloggen mit Facebook erhalte ich FirebaseUser im AuthStateListener, aber wie kann ich feststellen, ob dieser Benutzer über Facebook oder anders angemeldet ist?

UPDATEAs @Frank van Puffelen sagte, FirebaseAuth.getInstance (). GetCurrentUser (). GetProviderId () Sollte "facebook" zurückgeben, aber in meinem Fall wird "firebase" zurückgegeben. Jetzt kann ich nicht herausfinden, was der Grund für dieses Verhalten ist. Wenn ich FacebookToken habe, mache ich so etwas:

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

                        }

                    }
                });

Nach dem Aufruf der onComplete () -Methode erhält mein AuthStateListener den Benutzer, dessen Provider-ID nicht "facebook" ist, wie es sein sollte. Mache ich etwas falsch? Ich folgte offiziellen google Dokumentation

19
Taldakus

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

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

Es wird immer firebase zurückgegeben.

Um festzustellen, ob der Nutzer bei Facebook angemeldet ist, müssen Sie die Anbieterdaten überprüfen:

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

In meiner App verwende ich anonyme Firebase-Konten. Wenn ich Firebase-Authentifizierung mit einem Facebook-Konto oder einem Google-Konto verbinde, prüfe ich Folgendes:

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

}
3
Jayakrishnan PM

Es gibt Informationen in der antwortenden Absicht.
Siehe das folgende Snippet:
Der ResponseCode lautet entweder "Telefon", "google.com", "facebook.com" oder "Twitter.com" .

 `import com.firebase.ui.auth.AuthUI; 
 import com.firebase.ui.auth.IdpResponse; 
 .....
 @Override 
 protected void onActivityResult (final int requestCode, int resultCode, Intent 
 data) {
 super.onActivityResult (requestCode, resultCode, data); 

 if (requestCode == RC_SIGN_IN) {

 progressBar.setVisibility (View.VISIBLE); 

 Antwort von IdpResponse = IdpResponse.fromResultIntent (Daten); 

 if (resultCode == RESULT_OK) {
 String providerCode = response.getProviderType (); 
 ... 
 } 
 } 
1
Leonard T

Die neueste Lösung ist:

Wie erwähnt hier

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

und zur Anzeige in der Seite

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

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