web-dev-qa-db-fra.com

Comment réauthentifier un utilisateur sur Firebase avec Google Provider?

L'exemple d'utilisation de reauthenticate() dans Firebase indique uniquement comment réauthentifier un utilisateur ayant signé avec Email et mot de passe:

AuthCredential credential = EmailAuthProvider.getCredential("[email protected]", "password1234");
FirebaseAuth.getInstance().getCurrentUser().reauthenticate(credential);

Je sais aussi comment m'authentifier de nouveau avec Facebook Provider (credential = FacebookAuthProvider.getCredential(AccessToken.getCurrentAccessToken().toString())).

Le problème est qu’il n’existe pas dans l’API Google de méthodes équivalentes pour obtenir le jeton d’accès actuel et éventuellement le AuthCredential. Alors qu'est-ce que je passe à getCredential() dans ce cas?

21
Alaa M.

Je sais que c'est une vieille question, mais je n'ai pas trouvé de réponse complète à cette question. Voici comment le faire sur Android.

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
// Get the account
GoogleSignInAccount acct = GoogleSignIn.getLastSignedInAccount(context);
if (acct != null) {
     AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
     user.reauthenticate(credential).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if (task.isSuccessful()) {
                Log.d(TAG, "Reauthenticated.");
            }
        }
     });
} 
4
kivmii

Étant donné que vous auriez reçu GoogleSignInResult comme réponse à la connexion, je pense que vous pouvez utiliser le code suivant:

// assuming result variable has GoogleSignInResult
// GoogleSignInResult result 

// Get the account
GoogleSignInAccount acct = result.getSignInAccount();

// credential
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
FirebaseAuth.getInstance().getCurrentUser().reauthenticate(credential).addOnCompleteListener(new OnCompleteListener<Void>() {...
0
manishg

Vous pouvez obtenir GoogleSignInResult de 2 manières différentes pour vous authentifier.

i) En entrant votre identifiant de messagerie et votre mot de passe dans l'écran de connexion Google.

ii) En sélectionnant un compte parmi un compte déjà connecté au téléphone.

j'ai utilisé la 2ème approche pour obtenir un jeton d'accès et authentifier l'utilisateur.

pour plus de références de support, des liens sont donnés ci-dessous.

Connexion Google dans le lien 1

Stackoverflow - Actualisation du jeton

documentation du fournisseur d'authentification google

Documents de vérification des jetons côté serveur

si votre seul objectif est d'obtenir un jeton afin que vous puissiez également essayer cette source de github .

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
    .requestEmail()
    .build();

// utilise l'option de connexion pour créer l'instance du client api.

mGoogleApiClient = new GoogleApiClient.Builder(this)
    .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
    .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
    .build();
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent,RC_SIGN_IN); }

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from    GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN){
    GoogleSignInResult result =Auth.GoogleSignInApi.getSignInResultFromIntent(data);
    handleSignInResult(result);
    }


private void handleSignInResult(GoogleSignInResult result) {
Log.d(TAG, "handleSignInResult:" + result.isSuccess());
if (result.isSuccess()) {
    // Signed in successfully, show authenticated UI.
    GoogleSignInAccount acct = result.getSignInAccount();


} else {
    // Signed out, show unauthenticated.

       }
}

// s'authentifier

AuthCredential credential =
GoogleAuthProvider.getCredential(acct.getIdToken(), null);
FirebaseAuth.getInstance().getCurrentUser().reauthenticate(credential)
.addOnCompleteListener(new OnCompleteListener<Void>() {
// add your job here on authenticated
} 
// if token is obsoleted then you can do this
credential.refreshToken();
accessToken = credential.getAccessToken();
0
Alok Vishwakarma