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.
- Contraseña olvidada en Firebase para Android
- ¿Cómo inicializar firebase después del inicio de sesión de google de android?
- "GoogleApiClient no está conectado todavía" al cerrar la sesión cuando se utiliza la autorización de Firebase con google inicie sesión
- Cómo capturar una Firebase Auth excepciones específicas
- Uid de firewall y firebase uid no coinciden después de actualizar firebase a 9.2.0
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?
- Error: No se pudo resolver: com.google.firebase: firebase-core: 11.0.0
- El método SetProviders está marcado como desaconsejado
- UserProfileChangeRequest setPhotoUri - ¿Cómo se hace?
- Firebase se bloquea en Android durante el inicio de sesión anónimo
- FirebaseAuthUserCollisionException?
- No se encontró el archivo de clase de com.google.android.gms.internal.zzaja
- Clase de descriptor de módulo local para com.google.firebase.auth no encontrada
- FirebaseAuth.getCurrentUser () devuelve null DisplayName
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.
El contenido se verá así
El enlace de reinicio le pedirá el diálogo siguiente en una nueva página web
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
- Obtener valores de ArrayList <HashMap <String, String >>
- ¿Cómo habilito las opciones de desarrollador y el ADB en un Fire Phone?