web-dev-qa-db-fra.com

Comment déterminer si un utilisateur Firebase est connecté à l'aide de l'authentification Facebook

J'utilise firebase de google et j'ai quelques problèmes avec l'authentification de l'utilisateur. Après la connexion à Facebook, j'obtiens FirebaseUser dans AuthStateListener, mais comment puis-je détecter si cet utilisateur est connecté via Facebook ou autrement?

UPDATE Comme @Frank van Puffelen a déclaré FirebaseAuth.getInstance (). GetCurrentUser (). GetProviderId () Devrait renvoyer "facebook", mais dans mon cas, il renvoie "firebase". Maintenant, je ne peux pas comprendre quelle est la raison de ce comportement. Quand j'ai FacebookToken, je fais quelque chose comme ça:

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

                        }

                    }
                });

Et après que la méthode onComplete () ait été appelée, mon AuthStateListener obtient de l’utilisateur dont l’identifiant de fournisseur n’est pas «facebook» comme il se doit. Est-ce que je fais quelque chose de mal? J'ai suivi google officiel documentation

19
Taldakus

Dans les versions 3.x et supérieures, un seul utilisateur peut être connecté à plusieurs fournisseurs. Il n’existe donc plus le concept d’un ID fournisseur unique. En fait, lorsque vous appelez:

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

Il retournera toujours firebase.

Pour détecter si l'utilisateur était connecté à Facebook, vous devrez inspecter les données du fournisseur:

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

Dans mon application, j'utilise des comptes Anonymous Firebase. Lorsque je connecte l'authentification Firebase à un compte Facebook ou à un compte Google, je vérifie comme suit:

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

Il existe des informations dans l’intention de réponse.
Reportez-vous à l'extrait suivant:
Le code de réponse est "phone", "google.com", "facebook.com" ou "Twitter.com" .

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

 if (requestCode == RC_SIGN_IN) {

 progressBar.setVisibility (View.VISIBLE); 

 IdpResponse response = IdpResponse.fromResultIntent (data); 

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

La solution la plus récente est:

Comme noté ici

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

et pour l'affichage en page

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