2016-11-30 2 views
17

The example für die Verwendung von reauthenticate() in Firebase zeigt nur, wie einen Benutzer, der mit E-Mail und Passwort unterzeichnete erneut zu authentifizieren:Wie authentifiziere ich einen Benutzer auf Firebase mit Google Provider?

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

ich auch wissen, wie man erneut authentifizieren mit Facebook Provider (credential = FacebookAuthProvider.getCredential(AccessToken.getCurrentAccessToken().toString())).

Problem ist, es gibt keine gleichwertige Methode in Google API, um das aktuelle Access Token zu erhalten und schließlich die AuthCredential zu bekommen. Also, was überlasse ich in diesem Fall an getCredential()?

Antwort

0

Betrachtet man würde GoogleSignInResult als Antwort erhalten haben, zu unterzeichnen-in, ich glaube, 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

Ich erinnere mich nicht, was ich am Ende tun (es vor 4 Monaten ist), aber ich glaube, ich brauchte etwas statisch, dass ich verwenden könnte, wann immer ich will, und nicht nur bei der Anmeldung (zum Beispiel wenn der Benutzer seinen Account löschen wollte). Wie auch immer, weil ich nicht mehr daran arbeite, wenn jemand glaubt, dass dies die richtige Antwort ist, werde ich es als Antwort wählen. –

0

Sie GoogleSignInResult über 2 Wege erhalten können zu authentifizieren.

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

ii) Durch Auswahl eines Kontos von bereits eingeloggtem Konto im Telefon.

Ich habe den zweiten Ansatz verwendet, um Zugriffstoken zu erhalten und Benutzer zu authentifizieren.

für mehr Unterstützung Referenzen Links sind unten angegeben.

google sign in link 1

Stackoverflow - token refresh

google auth provider documentation

server side token verification docs

, wenn Ihr einziges Ziel ist es, Token zu bekommen, so 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. 

     } 
} 

// get authentifizierten

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(); 
Verwandte Themen