Cambiar contraseña con Firebase para Android

Quiero implementar la funcionalidad de contraseña de cambio para mi aplicación.

com.google.firebase:firebase-auth:9.0.2 en mi archivo build.gradle y hasta ahora todo ha estado funcionando bien hasta que intenté implementar la funcionalidad de cambio de contraseña.

He encontrado que el objeto FirebaseUser tiene un método updatePassword que toma una nueva contraseña como el parámetro. Yo podría utilizar este método y aplicar la validación yo mismo. Sin embargo, necesito la contraseña actual del usuario para comparar con el inputted y no puedo encontrar una manera de conseguir esa contraseña.

También encontré otro método en el objeto Firebase que toma la contraseña antigua, la nueva contraseña y un manejador. El problema es que necesito también incluir com.firebase:firebase-client-android:2.5.2+ para acceder a esta clase y cuando estoy intentando este método estoy recibiendo a siguiente error:

Los proyectos creados en console.firebase.google.com deben utilizar los nuevos SDK de autenticación de Firebase disponibles en firebase.google.com/docs/auth/

Siento que estoy perdiendo algo aquí. ¿Cuál es el enfoque recomendado para implementar esto? ¿Y cuándo usar qué dependencia?

Encontré un ejemplo práctico de esto en los documentos de Firebase :

Algunas acciones sensibles a la seguridad, como la eliminación de una cuenta, la configuración de una dirección de correo electrónico principal y el cambio de una contraseña, requieren que el usuario acceda recientemente. Si realiza una de estas acciones y el usuario ha iniciado sesión hace mucho tiempo, La acción falla y lanza FirebaseAuthRecentLoginRequiredException. Cuando esto sucede, vuelva a autenticar al usuario obteniendo nuevas credenciales de inicio de sesión del usuario y pasando las credenciales para volver a autenticarse. Por ejemplo:

 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) { if (task.isSuccessful()) { user.updatePassword(newPass).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG, "Password updated"); } else { Log.d(TAG, "Error password not updated") } } }); } else { Log.d(TAG, "Error auth failed") } } }); 

No hay manera de recuperar la contraseña actual de un usuario de la autenticación de Firebase.

Una forma de permitir que los usuarios cambien su contraseña es mostrar un diálogo donde ingresan su contraseña actual y la nueva contraseña que quieren. A continuación, inicia sesión (o vuelve a autenticar ) al usuario con la contraseña actual y llama a updatePassword() para actualizarla.

Cambiar la contraseña en firebase es un poco complicado. No es como lo que solemos hacer para cambiar la contraseña en el lado del servidor de secuencias de comandos y la base de datos. Para implementar la funcionalidad de cambio de contraseña en su aplicación, primero necesita obtener el correo electrónico del usuario de FirebaseAuth o pedir al usuario que introduzca el correo electrónico y después de que el usuario pida contraseña antigua porque no puede recuperar la contraseña del usuario como Frank van Puffelen dijo. Después de que usted necesita volver a autenticar eso. Una vez realizada la reautenticación, si tiene éxito, puede utilizar updatePassword() . He añadido un ejemplo a continuación que he utilizado para mi propia aplicación. Espero que te ayude.

 private FirebaseUser user; user = FirebaseAuth.getInstance().getCurrentUser(); final String email = user.getEmail(); AuthCredential credential = EmailAuthProvider.getCredential(email,oldpass); user.reauthenticate(credential).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if(task.isSuccessful()){ user.updatePassword(newPass).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if(!task.isSuccessful()){ Snackbar snackbar_fail = Snackbar .make(coordinatorLayout, "Something went wrong. Please try again later", Snackbar.LENGTH_LONG); snackbar_fail.show(); }else { Snackbar snackbar_su = Snackbar .make(coordinatorLayout, "Password Successfully Modified", Snackbar.LENGTH_LONG); snackbar_su.show(); } } }); }else { Snackbar snackbar_su = Snackbar .make(coordinatorLayout, "Authentication Failed", Snackbar.LENGTH_LONG); snackbar_su.show(); } } }); } } 

La consulta gira en torno a los usuarios que olvidan sus contraseñas o que desean restablecer sus contraseñas a través de una carta de correo electrónico. Que puede ser alcanzado por Auth.sendPasswordResetEmail("[email protected]");

Comienza por inicializar

  private FirebaseAuth mAuth; private FirebaseAuth.AuthStateListener mAuthListener; private String DummyEmail = "[email protected]" 

  mAuth = FirebaseAuth.getInstance(); mAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { if (firebaseAuth.getCurrentUser() == null) { } } }; 

En algún otro lugar cuando un usuario solicita actualizar o restablecer sus contraseñas simplemente acceder a la mAuth,

  private void PassResetViaEmail(){ if(mAuth != null) { Log.w(" if Email authenticated", "Recovery Email has been sent to " + DummyEmail); mAuth.sendPasswordResetEmail(DummyEmail); } else { Log.w(" error ", " bad entry "); } } 

Ahora, innecesario a la carga de consultar en torno a su base de datos para saber si el correo electrónico sale o no, Firebase mAuth se encargará de que para usted.

¿Está el correo electrónico autenticado? ¿Está activo en su lista de autenticación? A continuación, envíe un correo electrónico de restablecimiento de contraseña.

Introduzca aquí la descripción de la imagen

El contenido se verá así

Introduzca aquí la descripción de la imagen

El enlace de reinicio le pedirá el diálogo siguiente en una nueva página web Io

Extra

Si usted es bit nerved por el reajuste-plantilla "ideado" por Firebase. Puede acceder fácilmente y personalizar su propia carta desde la consola Firebase. Autenticación> Plantillas de correo electrónico> Restablecer contraseña

Introduzca aquí la descripción de la imagen

  • Cómo determinar si un usuario de Firebase está conectado utilizando la autenticación de facebook
  • Corregir la ubicación del código para comprobar Firebase si ya se ha creado un usuario?
  • Fallo de autenticación anónima de Firebase a través de datos móviles
  • ¿Cómo puedo deshabilitar las cuentas de usuario de un proyecto de firebase desde el código?
  • Firebase Android onAuthStateChanged llamado dos veces
  • Obtener id token en la aplicación de Android y verificarlo en el servidor de back-end (¿Cómo usar id token?)
  • Firebase Manage Multiple auth provider
  • Rare NullPointerException en GoogleApiClient usando Firebase
  • Salir correctamente de un usuario de la aplicación Android
  • ¿Por qué no hay captura de pantalla en aplicaciones recientes al finalizar la actividad en firebase onAuthStateChanged
  • Cómo Firebase Auth con Rails?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.