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?
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.");
}
}
});
}
É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>() {...
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();