¿Cómo eliminar un usuario de Firebase de la aplicación para Android?
Estoy intentando codificar un método Delete User en mi aplicación Android, pero tengo algunos problemas cada vez que lo ejecuto. Este método se ejecutará cuando un usuario presione el botón Suprimir cuenta en una Actividad. Mis aplicaciones funcionan con FirebaseUI Auth.
Aquí está el método:
- ¿Cómo actualizar la referencia de consulta de un adaptador de reciclador de reciclaje?
- ¿Sólo rellenar viewHolder con mensajes recuperados de la base de datos?
- ¿Cómo agregar más elementos a FirebaseRecyclerAdapter?
- Agregue al oyente táctil para Firebase RecyclerView
- Error al agregar dependencias para firebase-ui-auth
private void deleteAccount() { Log.d(TAG, "ingreso a deleteAccount"); FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(); final FirebaseUser currentUser = firebaseAuth.getCurrentUser(); currentUser.delete().addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG,"OK! Works fine!"); startActivity(new Intent(Main3WelcomeActivity.this, Main3Activity.class)); finish(); } } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.e(TAG,"Ocurrio un error durante la eliminación del usuario", e); } }); }
1) Cuando ejecuto esa función, aparece un mensaje Smart Lock en la pantalla y el usuario vuelve a iniciar sesión. Aquí hay una captura de pantalla de este mensaje.
2) En otras ocasiones, cuando el usuario está conectado por mucho tiempo, la función lanza una Excepción como esta:
06-30 00:01:26.672 11152-11152/com.devpicon.android.firebasesamples E/Main3WelcomeActivity: Ocurrio un error durante la eliminación del usuario com.google.firebase.FirebaseException: An internal error has occured. [ CREDENTIAL_TOO_OLD_LOGIN_AGAIN ] at com.google.android.gms.internal.zzacq.zzbN(Unknown Source) at com.google.android.gms.internal.zzacn$zzg.zza(Unknown Source) at com.google.android.gms.internal.zzacy.zzbO(Unknown Source) at com.google.android.gms.internal.zzacy$zza.onFailure(Unknown Source) at com.google.android.gms.internal.zzact$zza.onTransact(Unknown Source) at android.os.Binder.execTransact(Binder.java:453)
He leído que tengo que volver a autenticar al usuario, pero no estoy seguro de cómo hacerlo cuando estoy trabajando con Google Iniciar sesión.
- No se puede convertir el objeto de tipo java.util.ArrayList al modelo de tipo
- FirebaseUI autenticación con Facebook no funciona
- FirebaseRecyclerAdapter con vista vacía
- la fusión de manifiesto de android falló, servicios de juego de gms / firebase
- Leer datos de Firebase tarda mucho incluso con un pequeño conjunto de datos
- Paginación del adaptador reciclador Firebase
- Firebase android ¿Cómo evitar que FirebaseRecyclerAdapter se actualice automáticamente?
- Firebase UI - Auth - Utilizar diseño propio
Según la documentación de la base de datos de Firebase
método delete()
usuario puede delete()
al usuario de la base de datos Firebase
Antes de quitar el usuario reAuthenticate por favor el usuario.
Código de muestra
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); // Get auth credentials from the user for re-authentication. The example below shows // email and password credentials but there are multiple possible providers, // such as GoogleAuthProvider or FacebookAuthProvider. AuthCredential credential = EmailAuthProvider .getCredential("[email protected]", "password1234"); // Prompt the user to re-provide their sign-in credentials user.reauthenticate(credential) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { user.delete() .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG, "User account deleted."); } } }); } });
Para obtener más información: https://firebase.google.com/docs/auth/android/manage-users#re-authenticate_a_user
Si desea que el usuario re Autenticación con otro proveedor de Singin sólo tiene que cambiar el Provider
de GoogleAuthProvider
continuación es el código de ejemplo
GoogleAuthProvider.getCredential(googleIdToken,null);
Su devolución de llamada de delete
ya maneja el caso de un error, ¿por qué agrega addOnFailureListener
más tarde?
Intente eliminarlo de esta manera:
private void deleteAccount() { Log.d(TAG, "ingreso a deleteAccount"); FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(); final FirebaseUser currentUser = firebaseAuth.getCurrentUser(); currentUser.delete().addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG,"OK! Works fine!"); startActivity(new Intent(Main3WelcomeActivity.this, Main3Activity.class)); finish(); } else { Log.w(TAG,"Something is wrong!"); } } }); }
Utilice estos métodos: –
retirar()
Es equivalente al set(null)
llamadas set(null)
.
o
RemoveUser ()
removeUser(credentials, [onComplete])
En primer lugar, debe guardar el token de autenticación o la contraseña en el momento en que el usuario inicie sesión. Si su aplicación no proporciona, como Inicio de sesión de Google, Inicio de sesión de Facebook u otros, sólo tiene que almacenar contraseña.
//If there's any, delete all stored content from this user on Real Time Database. yourDatabaseReferenceNode.removeValue(); //Getting the user instance. final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); if (user != null) { //You need to get here the token you saved at logging-in time. String token = "userSavedToken"; //You need to get here the password you saved at logging-in time. String password = "userSavedPassword"; AuthCredential credential; //This means you didn't have the token because user used like Facebook Sign-in method. if (token == null) { credential = EmailAuthProvider.getCredential(user.getEmail(), password); } else { //Doesn't matter if it was Facebook Sign-in or others. It will always work using GoogleAuthProvider for whatever the provider. credential = GoogleAuthProvider.getCredential(token, null); } //We have to reauthenticate user because we don't know how long //it was the sign-in. Calling reauthenticate, will update the //user login and prevent FirebaseException (CREDENTIAL_TOO_OLD_LOGIN_AGAIN) on user.delete() user.reauthenticate(credential) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { //Calling delete to remove the user and wait for a result. user.delete().addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { //Ok, user remove } else { //Handle the exception task.getException(); } } }); } }); }
- Error de compilación de estudio de Android en ubuntu install
- Android edittext – selecciona el número de teléfono del contacto (con autocompletado)