Con el proveedor de autenticación de correo electrónico y contraseña de Atlas App Services, puede registrar una nueva cuenta, confirmar una dirección de correo electrónico y restablecer la contraseña de un usuario desde el código de cliente.
Advertencia
Versión 0.5.0 Cambio importante
La versión 0.5.0 del SDK de Flutter de Realm incluye un cambio importante en la autenticación por correo electrónico y contraseña. Este cambio corrige un error en el que el carácter nulo de Unicode... \u0000
Se añadió al final de las contraseñas en versiones anteriores del SDK.
Como resultado, una vez que actualice su aplicación a la versión >0.5.0, los usuarios deberán restablecer su contraseña o crear una cuenta nueva. Las contraseñas anteriores dejarán de funcionar después de actualizar a la versión >0.5.0.
Antes de comenzar
Antes de empezar a escribir código de cliente, debe comprender los diferentes flujos de autenticación de correo electrónico y contraseña que ofrece App Services y configurar la implementación del backend para su aplicación. App Services ofrece diversas maneras de confirmar la identidad de los usuarios de correo electrónico y contraseña, así como de restablecer sus contraseñas. Obtenga más información sobre la autenticación de correo electrónico y contraseña de App Services, así como sobre cómo habilitarla y configurarla.
Registrar un usuario
Crear un nuevo EmailPasswordAuthProviderinstancia con su
Appinstancia como argumento.Invoque EmailPasswordAuthProvider.registerUser(), pasando el correo electrónico y la contraseña del usuario como argumentos.
EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app); await authProvider.registerUser("lisa@example.com", "myStr0ngPassw0rd");
Nota
Registrar a un usuario no inicia sesión en ese usuario de manera automática. Debe iniciar sesión al usuario por separado.
Iniciar sesión como usuario
Cree una credencial de correo electrónico/contraseña llamando a Credentials.emailPassword() con el correo electrónico y la contraseña del usuario.
Pase la credencial generada a
app.logIn.
final emailPwCredentials = Credentials.emailPassword("lisa@example.com", "myStr0ngPassw0rd"); await app.logIn(emailPwCredentials);
Confirmar la dirección de correo electrónico de un nuevo usuario
Una vez que registre un nuevo usuario de correo electrónico/contraseña, deberá confirmar la dirección de correo electrónico a menos que configure App Services para confirmar automáticamente a los usuarios.
Función de confirmación personalizada
Si configura App Services para usar una función personalizada para la confirmación de la dirección de correo electrónico, gestione la confirmación del usuario con la lógica del flujo de su función personalizada. El backend de App Services invoca la función personalizada cuando el usuario se registra.
Enviar correo electrónico de confirmación
Solo necesita enviar un correo electrónico de confirmación si configura App Services para manejar la confirmación del usuario con un correo electrónico.
Para confirmar un usuario recién creado, envíe una confirmación token y tokenId a EmailPasswordAuthProvider.confirmUser(). Estas se incluyen en el correo electrónico que se envía al usuario al registrarse.
EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app); await authProvider.confirmUser(token, tokenId);
Nota
Usar enlaces profundos en aplicaciones Flutter
Las aplicaciones móviles pueden gestionar la confirmación por correo electrónico directamente en la aplicación configurando enlaces profundos.
Reintentar la confirmación del usuario
El SDK proporciona métodos para reenviar correos electrónicos de confirmación de usuarios o reintentar la confirmación personalizada.
Reintentar una función de confirmación de usuario
Utiliza este método de confirmación de usuario si has configurado el backend de Servicios de aplicación para reintentar una función de confirmación de usuario personalizada.
Para volver a intentar una función de confirmación, pase el correo electrónico utilizado para registrarse a EmailPasswordAuthProvider.retryCustomConfirmationFunction().
EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app); await authProvider.retryCustomConfirmationFunction("lisa@example.com");
Reenviar un correo electrónico de confirmación de usuario
Utilice este método de confirmación de usuario si ha configurado el backend de App Services para reenviar un correo electrónico de confirmación. Los tokens de confirmación de cada URL caducan después de 30 minutos. Si un usuario no sigue el enlace ni confirma la confirmación dentro de ese plazo, deberá solicitar un nuevo correo electrónico de confirmación.
Para reenviar un correo electrónico de confirmación, pase el correo electrónico utilizado para registrarse a EmailPasswordAuthProvider.resendUserConfirmation().
EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app); await authProvider.resendUserConfirmation("lisa@example.com");
Restablecer la contraseña de un usuario
Restablecer la contraseña de un usuario es un proceso de varios pasos.
En tu aplicación cliente, proporcionas una interfaz de usuario para que el usuario restablezca su contraseña. Tu aplicación de App Services puede enviar un correo electrónico o ejecutar una función personalizada para confirmar la identidad del usuario.
Después de confirmar la identidad del usuario, puede completar la solicitud de restablecimiento de contraseña.
Una vez completado el restablecimiento de la contraseña, el usuario puede iniciar sesión con la nueva contraseña.
Para seleccionar cuál de estos métodos usar en su aplicación, configure el comportamiento de restablecimiento de contraseña de autenticación de App Services.
Llamar a una función de reinicio
Al configurar tu aplicación para que ejecute una función de restablecimiento de contraseña, defines la función que debe ejecutarse al llamar a EmailPasswordAuthProvider.callResetPasswordFunction(). Esta función puede aceptar un nombre de usuario, una contraseña y cualquier número de argumentos adicionales. Puedes usar estos argumentos para especificar detalles como las respuestas a las preguntas de seguridad u otras pruebas que el usuario debe superar para restablecer la contraseña correctamente.
Quizás prefiera usar una función de restablecimiento de contraseña personalizada si desea definir sus propios flujos de restablecimiento de contraseña. Por ejemplo, podría enviar un correo electrónico de restablecimiento de contraseña personalizado desde un dominio específico. O podría usar un servicio distinto del correo electrónico para confirmar la identidad del usuario.
En App Services, define la función de restablecimiento de contraseña personalizada que se ejecuta al llamar a este método. Esta función puede devolver uno de tres estados posibles:
failpendingsuccess
Un estado fail se considera un error por el SDK. El SDK callResetPasswordFunction() no toma valores de retorno, por lo que no devuelve un estado pending o success al cliente.
Caso pendiente del lado del servidor
La función de restablecimiento de contraseña de App Services puede devolver pending si desea que el usuario realice algún paso adicional para confirmar su identidad. Sin embargo, este valor de retorno no se pasa al del callResetPasswordFunction() SDK, por lo que la aplicación cliente debe implementar su propia lógica para gestionar un pending estado.
Su función del servidor podría enviar un correo electrónico mediante un proveedor de correo electrónico personalizado. O bien, podría usar SMS para confirmar la identidad del usuario mediante un mensaje de texto.
Tienes acceso a token y tokenId en el contexto de la función de restablecimiento de contraseña de App Services. Si pasas esta información desde la función de restablecimiento de contraseña de App Services, puedes devolver estos valores a tu aplicación mediante enlaces profundos específicos de la plataforma o enlaces universales. Luego, tu aplicación cliente puede llamar a EmailPasswordAuthProvider.completeResetPassword para completar el proceso de restablecimiento de contraseña.
// The password reset function takes any number of // arguments. final args = []; EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app); await authProvider.callResetPasswordFunction( "lisa@example.com", "n3wSt0ngP4ssw0rd!", functionArgs: args); // ... Later... // Token and tokenId are parameters you can access // in the App Services function context. You could send // this to the user via email, SMS, or some other method. final token = "someToken"; final tokenId = "someTokenId"; await authProvider.completeResetPassword( "n3wSt0ngP4ssw0rd!", token, tokenId);
Caso de éxito del lado del servidor
Si la función de restablecimiento de contraseña de App Services realiza una validación adicional dentro de la función, o si ya validó la identidad del usuario antes de intentar restablecer la contraseña, puede configurar la función de App Services para que success devuelva. Sin embargo, este valor de retorno no se pasa al del callResetPasswordFunction() SDK, por lo que la aplicación cliente debe implementar su propia lógica para gestionar un success estado.
Llamar a la función en este ejemplo realiza todo el proceso de restablecimiento de contraseña.
// The password reset function takes any number of // arguments. You might ask the user to provide answers to // security questions, for example, to verify the user // should be able to complete the password reset. final args = [ "Snowball II", "Springfield Elementary School", "Bouvier" ]; EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app); await authProvider.callResetPasswordFunction( "lisa@example.com", "n3wSt0ngP4ssw0rd!", functionArgs: args);
Enviar correo electrónico de restablecimiento de contraseña
Para enviar correos electrónicos de restablecimiento de contraseña para confirmar la identidad del usuario, debe configurar su aplicación para enviar un correo electrónico de restablecimiento de contraseña.
Para enviar un correo electrónico de restablecimiento de contraseña, pasa el correo electrónico utilizado para registrarse a EmailPasswordAuthProvider.resetPassword().
EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app); await authProvider.resetPassword("lisa@example.com");
Los correos electrónicos de restablecimiento de contraseña contienen una URL codificada con dos valores: token tokenIdy. Para completar el proceso de restablecimiento de contraseña, puede restablecer la contraseña del usuario en el cliente o mediante una función personalizada en el backend. Para usar el SDK y completar el restablecimiento de contraseña, pase estos valores a EmailPasswordAuthProvider.completeResetPassword().
Si el usuario no visita la URL del correo electrónico de restablecimiento de contraseña en 30 minutos, los token y tokenId caducarán. Debe reiniciar el proceso de restablecimiento de contraseña.
EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app); await authProvider.completeResetPassword( "n3wSt0ngP4ssw0rd!", token, tokenId);
Nota
Para acceder a los token tokenId valores y enviados en el correo electrónico de restablecimiento de contraseña, puede utilizar un correo electrónico de restablecimiento de contraseña personalizado que contenga un enlace profundo.