Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Administrar usuarios

Email/Password Users - Flutter SDK

With Atlas App Services's email/password authentication provider, you can register a new account, confirm an email address, and reset a user's password from client code.

Advertencia

Version 0.5.0 Breaking Change

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.

As a result, once you upgrade your application to use version >0.5.0, users must either reset their password or create a new account. Previous passwords will no longer work after updating to >0.5.0.

  1. Create an App Services App.

  2. 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.

  1. Crear un nuevo EmailPasswordAuthProviderinstancia con su App instancia como argumento.

  2. Invoke EmailPasswordAuthProvider.registerUser(), passing the user's email and password as arguments.

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.

  1. Create an email/password credential by calling Credentials.emailPassword() with the user's email and password.

  2. Pass the generated credential to app.logIn.

final emailPwCredentials =
Credentials.emailPassword("lisa@example.com", "myStr0ngPassw0rd");
await app.logIn(emailPwCredentials);

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.

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.

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

Usa enlaces profundos en aplicaciones Flutter

Las aplicaciones móviles pueden gestionar la confirmación por correo electrónico directamente en la aplicación configurando deep linking.

El SDK proporciona métodos para reenviar correos electrónicos de confirmación de usuarios o reintentar la confirmación personalizada.

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

Utilice este método de confirmación de usuario si ha configurado el backend de Servicios de aplicación para reenviar un correo electrónico de confirmación. Los tokens de confirmación en cada URL expiran después de 30 minutos. Si un usuario no sigue el enlace y confirma dentro de ese periodo, debe solicitar un nuevo correo de confirmación.

To resend a confirmation email, pass the email used in sign up to EmailPasswordAuthProvider.resendUserConfirmation().

EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app);
await authProvider.resendUserConfirmation("lisa@example.com");

Resetting a user's password is a multi-step process.

  1. En su aplicación de cliente, proporciona una interfaz de usuario para que el usuario restablezca su contraseña. Su App Services App puede enviar un correo electrónico o ejecutar una función personalizada para confirmar la identidad del usuario.

  2. After confirming the user's identity, you can complete the password reset request.

  3. After the password reset is complete, the user can log in using the new password.

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.

When you configure your app to run a password reset function, you define the function that should run when you call EmailPasswordAuthProvider.callResetPasswordFunction(). This function can take a username, a password, and any number of additional arguments. You can use these arguments to specify details like security question answers or other challenges that the user should pass to successfully complete a password reset.

Es posible que prefieras usar una función personalizada de restablecimiento de contraseña cuando quieras definir tus propios flujos de restablecimiento de contraseña. Por ejemplo, puede que envíes un correo electrónico personalizado de restablecimiento de contraseña desde un dominio específico. O podría usar un servicio que no sea correo electrónico para confirmar la identidad del usuario.

On the App Services side, you define the custom password reset function that runs when you call this method. That function can return one of three possible statuses:

  • fail

  • pending

  • success

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.

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.

Tu función del lado del servidor puede enviar un correo electrónico utilizando un proveedor de correo electrónico personalizado. O puedes usar SMS para confirmar la identidad del usuario mediante un mensaje de texto.

You have access to a token and tokenId in the App Services password reset function context. If you pass this information from your App Services password reset function, you can pass these values back to your app using platform-specific deep linking or universal links. Then, your client application can call EmailPasswordAuthProvider.completeResetPassword to complete the password reset flow.

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

If your App Services password reset function does additional validation within the function, or if you have validated the user's identity prior to attempting to reset the password, you may configure the App Services function to return success. However, that return value is not passed to the SDK's callResetPasswordFunction(), so your client app must implement its own logic to handle a success status.

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

Para enviar correos de restablecimiento de contraseña y así confirmar la identidad del usuario, se debe configurar la aplicación para enviar un correo 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");

Password reset emails contain a URL encoded with two values, token and tokenId. To complete the password reset flow, you can reset the user's password on the client or by calling a custom function on the backend. To use the SDK to complete the password reset, pass these values to EmailPasswordAuthProvider.completeResetPassword().

If the user does not visit the URL from the password reset email within 30 minutes, the token and tokenId expire. You must begin the password reset process again.

EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app);
await authProvider.completeResetPassword(
"n3wSt0ngP4ssw0rd!", token, tokenId);

Nota

To access the token and tokenId values sent in the password reset email, you can use a custom password reset email containing a deep link.

Volver

Authenticate Users

En esta página