users - update firebase user android
¿Cómo volver a autenticar a un usuario en Firebase con Google Provider? (2)
Teniendo en cuenta que habría recibido GoogleSignInResult
como respuesta al inicio de sesión, creo que puede usar el siguiente código:
// 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>() {...
El ejemplo para usar reauthenticate()
en Firebase muestra solo cómo volver a autenticar a un usuario que firmó con Correo electrónico y contraseña :
AuthCredential credential = EmailAuthProvider.getCredential("[email protected]", "password1234");
FirebaseAuth.getInstance().getCurrentUser().reauthenticate(credential);
También sé cómo volver a autenticarse con Facebook Provider ( credential = FacebookAuthProvider.getCredential(AccessToken.getCurrentAccessToken().toString())
).
El problema es que no existe un método equivalible en la API de Google para obtener el token de acceso actual y, finalmente, obtener el AuthCredential
. Entonces, ¿qué paso para getCredential()
en este caso?
Puede obtener GoogleSignInResult
por 2 vías para autenticarse.
i) Al ingresar la identificación de correo electrónico y la contraseña en la pantalla de inicio de sesión de google.
ii) Al seleccionar la cuenta de la cuenta ya iniciada en el teléfono.
utilicé el segundo método para obtener el token de acceso y autenticar al usuario.
para obtener más referencias de soporte, los enlaces se dan a continuación.
google iniciar sesión en el enlace 1
Documentación del proveedor de Google Auth
documentos de verificación de token del lado del servidor
si tu único objetivo es obtener token, puedes probar esta fuente github .
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
// use la opción de inicio de sesión para compilar instecia de cliente de 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.
}
}
// obtener autenticado
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();