usuario users update getcurrentuser example current auth autenticacion android firebase firebase-authentication google-signin

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

- actualización de token

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