it-swarm.com.de

Wie authentifizieren Sie einen Benutzer bei Firebase bei Google Provider?

Das Beispiel für die Verwendung von reauthenticate() in Firebase zeigt nur, wie Sie einen Benutzer erneut authentifizieren, der mit Email und Passwort unterschrieben hat:

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

Ich weiß auch, wie ich mich bei Facebook Provider (credential = FacebookAuthProvider.getCredential(AccessToken.getCurrentAccessToken().toString())) erneut authentifizieren kann.

Das Problem ist, dass es keine gleichwertige Methode in der Google-API gibt, um das aktuelle Zugriffstoken und schließlich die AuthCredential zu erhalten. Was muss ich in diesem Fall an getCredential() übergeben?

21
Alaa M.

Ich weiß, das ist eine alte Frage, aber ich habe keine vollständige Antwort darauf gefunden. So geht es auf 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

In Anbetracht der Tatsache, dass Sie GoogleSignInResult als Antwort auf die Anmeldung erhalten haben, können Sie den folgenden Code verwenden:

// 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

Sie können GoogleSignInResult über 2 Wege zur Authentifizierung erhalten.

i) Durch Eingabe der E-Mail-ID und des Kennworts in den Anmeldebildschirm von Google.

ii) Durch Auswahl eines Kontos aus bereits angemeldetem Telefonkonto.

ich habe 2nd Ansatz verwendet, um Zugriffstoken zu erhalten und Benutzer zu authentifizieren.

weitere Support-Referenzen finden Sie weiter unten.

google anmelden link 1

Stackoverflow - Tokenaktualisierung

google auth provider-dokumentation

serverseitige Token-Überprüfungsdokumente

wenn Ihr einziges Ziel darin besteht, ein Token zu erhalten, können Sie auch this github source versuchen.

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

// Verwenden Sie die Anmeldeoption, um einen API-Client zu erstellen.

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.

       }
}

// authentifizieren

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