Overview
La autenticación por correo electrónico/contraseña permite a los usuarios registrarse e iniciar sesión usando una dirección de correo electrónico. Atlas App Services debe confirmar que los usuarios de correo electrónico/contraseña antes de permitirles iniciar sesión.
El siguiente diagrama muestra el flujo del proceso para iniciar sesión:

Nota
Las direcciones de correo electrónico de los usuarios distinguen entre mayúsculas y minúsculas. Por ejemplo, un usuario con la dirección de correo electrónico TestAccount@example.com No se pudo iniciar sesión usando la dirección testaccount@example.com.
Configuración
En la navegación izquierda, haga clic en Autenticación.
En la lista de proveedores de autenticación, seleccione Email/PasswordDesde esta pantalla, puede configurar y habilitar el proveedor. Utilice las siguientes secciones como guía durante el proceso.
Para habilitar y configurar el proveedor de autenticación de correo electrónico/contraseña con la CLI de App Services, defina un objeto de configuración para él /auth/providers.json en.
Las configuraciones del proveedor de correo electrónico/contraseña tienen el siguiente formato:
{ "local-userpass": { "name": "local-userpass", "type": "local-userpass", "config": { "autoConfirm": <boolean>, "emailConfirmationUrl": <string>, "confirmEmailSubject": <string>, "runConfirmationFunction": <boolean>, "confirmationFunctionName": <string>, "resetPasswordUrl": <string>, "resetPasswordSubject": <string>, "runResetFunction": <boolean>, "resetFunctionName": <string>, }, "disabled": <boolean> } }
Tip
El name de un proveedor de autenticación siempre es el mismo que su type.
Confirmación del usuario
Before an email/password user can authenticate, your app must register and confirm the user's new account. Registering an email/password user creates a new user object. App Services then requires confirmation of the account. You can select one of three methods to confirm a new user account:
The following diagram shows the process flow for confirming a user:

Estado de la nueva cuenta de usuario
A user account can be in one of 2 states: Pending and Confirmed.
Al iniciarse el proceso de confirmación, Atlas App Services crea una cuenta de usuario y establece el estado en Pending Confirmation. En este estado, el usuario no puede iniciar sesión. Dado que la dirección de correo electrónico ya está asociada a una cuenta de usuario, cualquier intento de volver a registrarla fallará.
With the account in the pending state, the user must confirm their account before logging in. When the user confirms their account, Atlas App Services sets the status to Confirmed and the user can log in.
Si está confirmando a los usuarios automáticamente, la cuenta se crea con el estado establecido en Confirmed y el usuario puede iniciar sesión inmediatamente después de registrarse.
Advertencia
Solo utilice la confirmación automática cuando esté desarrollando y probando su aplicación. Las aplicaciones de producción siempre deben usar un proceso de confirmación seguro.
Puede ver una lista de cuentas de usuario pendientes en la interfaz de usuario o a través de las API de App Services:
En la navegación izquierda, debajo de Data Access, haga clic en App Users.
En la parte superior de la lista de usuarios, seleccione el filtro Pending.
Para ver los usuarios pendientes con la CLI de Realm, use el comando appservices users list e incluya la --pending opción.
Para ver los usuarios pendientes con la API de administración, utilice el punto final Listar usuarios.
Enviar correo electrónico de confirmación
Con este método de confirmación, los usuarios deben responder a un correo electrónico al registrarse. El correo contiene un enlace a una URL de confirmación. El usuario debe visitar este enlace en un plazo de 30 minutos para confirmar que controla la dirección de correo electrónico.
Configure the following settings to have App Services automatically send a confirmation email:
Email Confirmation URL: the base of the URL included in every confirmation email. App Services appends a unique
tokenandtokenIdto this URL. These serve as query parameters to create a unique link for every confirmation. To confirm the user, first extract these query parameters from the user's unique URL. Then, pass thetokenandtokenIdto the Client SDK'sconfirmUserfunction.Las aplicaciones móviles pueden gestionar la confirmación de correo electrónico directamente en la aplicación. Para ello, configure los enlaces profundos.en Android o enlaces universales en iOS.
Email Confirmation Subject: la línea de asunto del correo electrónico que Servicios de aplicación envía. Este valor es opcional, si se omite, App Services utiliza una línea de asunto por defecto en su lugar. Los asuntos personalizados de confirmación por correo electrónico pueden contener un máximo de 256 caracteres.
Nota
Actualmente, los correos electrónicos de confirmación no se pueden personalizar más allá de la URL base y el asunto. En particular, siempre provienen de una dirección de correo electrónico mongodb.com.
Para aplicaciones de producción, puede usar una función de confirmación en lugar del método de confirmación por correo electrónico incorporado. Las funciones de confirmación permiten crear confirmaciones de correo electrónico completamente personalizadas. Consulta Ejecutar una función de confirmación para obtener más información.
Ejecutar una función de confirmación
Puedes usar Run a Confirmation Function cuando se registra un nuevo usuario. App Services envía un token de confirmación, un ID de token y el correo electrónico del usuario a la función que creaste. Esta función ejecuta la lógica necesaria para confirmar al usuario y devuelve uno de los siguientes objetos de resultado, que se explican con más detalle a continuación:
{ status: 'success' }{ status: 'fail' }{ status: 'pending' }
Within the function, you define custom logic to confirm users. For example, your function might:
Envíe correos electrónicos de confirmación personalizados desde un dominio específico. Envíelos con una plantilla específica mediante un servicio externo.
Leer los permisos del usuario de una colección en MongoDB Atlas o en un servicio externo REST.
Envía mensajes de confirmación a través de un servicio que no sea el correo electrónico, como SMS.
La firma de la función de confirmación personalizada tiene un parámetro. Es un objeto que contiene datos de usuario y tokens de confirmación. Estos campos son:
Campo | Descripción |
|---|---|
| La dirección de correo electrónico del usuario. |
| Un valor único que se utiliza para confirmar la identidad del usuario. Se utiliza al llamar a la función "Confirmar usuario" del SDK. |
| Un valor único que se utiliza para confirmar la identidad del usuario. Se utiliza al llamar a la función "Confirmar usuario" del SDK. |
La función de confirmación personalizada del usuario devuelve un objeto con un campo de estado. La siguiente tabla describe los valores potenciales de este campo:
Estado | Efecto |
|---|---|
| App Services confirma la identidad del usuario, permitiéndole iniciar sesión en su nueva cuenta. |
| App Services cambia el estado de confirmación del usuario a |
| App Services does not create a user account. The user can only retry account confirmation by registering again. Since the previous account doesn't exist, the user can reuse the same username (email). |
El siguiente es un ejemplo de una función de confirmación de usuario que:
Verifica que el correo electrónico proporcionado sea válido.
Confirma que la dirección de correo electrónico proporcionada tiene acceso a un servicio particular.
Envía un mensaje SMS al usuario.
Si el mensaje se envía correctamente, informa a Atlas App Services para crear una nueva cuenta con estado Pendiente.
exports = ({ token, tokenId, username }) => { // Validate the username const isValidEmail = myCustomValidatorService.validate(username); // Check if the user has access to this service const isPrivileged = myCustomAuthorizationService.hasAccess(username) // Send a message to the user so that they can confirm themselves const msgSendSuccessful = isValidEmail && isPrivileged && mySmsService.send(username, token, tokenId) if ( msgSendSuccessful ) { return { status: 'pending' }; } else { return { status: 'fail' }; } }
A menos que la función personalizada confirme automáticamente al usuario, debe proporcionar un medio para que el usuario complete el proceso de confirmación después de que se active la función. Después de completar cualquier paso de confirmación adicional, llame al método "Confirmar usuario" del SDK para finalizar la creación de la cuenta de usuario en Atlas App Services.
Automatically Confirm Users
Puedes configurar el proveedor para Automatically Confirm Users. Cuando selecciona App Services confirma inmediatamente los nuevos usuarios de Email/Contraseña después del registro.
Advertencia
aplicación Services no valida las direcciones de correo electrónico confirmadas automáticamente. Como resultado, existen varias razones por las que es posible que no puedas contactar a dichos usuarios por correo electrónico:
An automatically confirmed user's email address might not actually belong to that user. (e.g. a user could sign up as
steve.jobs@apple.com)Es posible que la dirección de correo electrónico de un usuario ni siquiera sea una dirección de correo electrónico válida (por ejemplo, un usuario podría registrarse como
my.name@gmailoasdavaskljj).
Exercise caution with this option. Securely resetting the password of a user account with no valid contact information can be very difficult.
Restablecimiento de contraseña
Un usuario de correo electrónico/contraseña podría olvidar su contraseña y necesitar restablecerla. Por razones de seguridad, debe confirmar la identidad del usuario antes de completar el restablecimiento de contraseña. App Services ofrece dos maneras de hacerlo:
Tras confirmar la identidad del usuario, puede completar la solicitud de restablecimiento de contraseña. Una vez completado el restablecimiento, el usuario podrá iniciar sesión con la nueva contraseña.

Send a Password Reset Email
Puedes configurar el proveedor para que Send a Password Reset Email.. Cuando un usuario solicita un restablecimiento de contraseña, App Services envía una URL de restablecimiento de contraseña al correo electrónico del usuario. El usuario debe visitar este URL dentro de 30 minutos.
Al configurar correos electrónicos de restablecimiento de contraseña, puede configurar los siguientes ajustes:
Password Reset URL: la base de la URL incluida en cada correo electrónico de restablecimiento de contraseña. Aplicación Services añade un
tokeny untokenIdúnicos a esta URL. Estos sirven como parámetros de query para crear un enlace único para cada restablecimiento de contraseña. Para restablecer la contraseña del usuario, extrae estos parámetros de query de la URL única del usuario. Pasar el token y tokenId a la funciónresetPassworddel SDK del Cliente.Reset Password Email Subject: el asunto del correo electrónico que envía App Services. Este valor es opcional: si se omite, App Services usa un asunto predeterminado. Los asuntos personalizados para restablecer la contraseña pueden contener un máximo de 256 caracteres.
Las aplicaciones móviles pueden gestionar el restablecimiento de contraseñas directamente en la app. Configure enlaces profundos en Android o enlaces universales en iOS.
Nota
Actualmente, los correos electrónicos de restablecimiento de contraseña no se pueden personalizar más allá de la URL base y el asunto. En particular, siempre provienen de una dirección de correo electrónico mongodb.com.
Para las aplicaciones en producción, puedes usar una función personalizada para restablecer la contraseña en lugar del método de correo electrónico de restablecimiento de contraseña con funcionalidad incorporada. Las funciones personalizadas te permiten crear confirmaciones de correo electrónico completamente personalizadas o utilizar un método distinto al correo electrónico para confirmar una solicitud de restablecimiento de contraseña.
Ejecutar una función de restablecimiento de contraseña
Puedes configurar el proveedor Run a Password Reset
Function como. Defines una función para que App Services se ejecute cuando callResetPasswordFunction() en el SDK. App Services pasa el correo electrónico del usuario, la nueva contraseña deseada, un token de confirmación y un ID de token a la función que creas. La función ejecuta la lógica necesaria para confirmar la identidad del usuario antes de restablecer la contraseña.
Los Servicios de la aplicación pueden restablecer inmediatamente la contraseña del usuario. También puede solicitar confirmación adicional de la aplicación cliente.
La función de App Services debe devolver un objeto que contenga una clave status. La clave se asigna a una cadena con uno de los siguientes valores, que se explican con más detalle a continuación:
{ status: 'success' }{ status: 'fail' }{ status: 'pending' }
Advertencia
La función del SDK de Realm callResetPasswordFunction() no está autenticada. Su recuperación de contraseña está destinada únicamente a usuarios que no pueden iniciar sesión en su cuenta. Por lo tanto, no se puede asociar ninguna llamada a esta función con un usuario específico de App Services. Devolver un success estado cambia permanentemente la contraseña al nuevo valor en el password parámetro de la función. Por lo tanto, devolver success puede provocar que cualquier usuario restablezca la contraseña de cualquier otro usuario de la aplicación. Por seguridad, debe enviar un mensaje al propietario de la cuenta a través de un método de comunicación confiable y pending devolver.
Puede utilizar una función de restablecimiento de contraseña personalizada para definir sus propios flujos de restablecimiento de contraseña:
Send custom password reset emails from a specific domain with a particular template using an external service.
Interfaz con una colección de MongoDB Atlas para implementar un periodo de recuperación para el restablecimiento de contraseña. Esto puede evitar demasiados intentos de restablecimiento de contraseña en una sola cuenta durante un período determinado.
Envíe mensajes de restablecimiento de contraseña personalizados a través de un servicio que no sea el correo electrónico.
Nota
Usar una función de restablecimiento de contraseña es mutuamente excluyente con la configuración de App Services para enviar un correo electrónico de restablecimiento de contraseña. Al configurar el restablecimiento de contraseña para usar una función personalizada, al llamar a sendResetPasswordEmail() en el SDK del cliente se devuelve un error.
La firma de la función de restablecimiento de contraseña personalizada es variádica: acepta cualquier número de parámetros. El primero siempre es un objeto que contiene datos de usuario y tokens de confirmación. Todos los parámetros siguientes son personalizados y se pasan al SDK del cliente como una colección de argumentos. Por ejemplo, la llamada al SDK del cliente:
callResetPasswordFunction("myUsername", "newPassword", ["Security Question Answer 1", "Security Question Answer 2", "securityCode:0510"])
Se convierte en esta firma personalizada para la función de restablecimiento de contraseña:
resetFunc({username, password, token, tokenId, currentPasswordValid}, securityAnswer1, securityAnswer2, securitySMSCode)
In the custom password reset function, an object must be passed as the first parameter. The following table describes the fields found in this object:
Campo | Descripción |
|---|---|
| La dirección de correo electrónico del usuario. |
| A new proposed password for the user. If this function returns the successful status, this is the user's new password. |
| A unique value used to update the user's password. |
| A unique value used to confirm the user's identity using the SDK |
| Un booleano que es verdadero si un usuario solicita cambiar su contraseña por la actual. |
The custom password reset function must return an object that contains a status field. The value of this status field may be one of:
Estado | Estado de restablecimiento de contraseña | Efecto SDK |
|---|---|---|
| App Services changes the user's password to the provided | Si la llamada a la función personalizada devuelve un |
| App Services waits for the client application to take some additional action to complete the password reset. For example, the custom password reset function may send a | El método del SDK que llama a esta función no toma un valor de retorno, por lo que no gestiona directamente un caso |
| Nothing happens. | El SDK interpreta un |
Una función de restablecimiento de contraseña personalizada puede incluir elementos similares a este ejemplo:
exports = ({ token, tokenId, username, password, currentPasswordValid }) => { // check if the username corresponds to a real user const isUser = myCustomValidator.validate(username); // check if the user is attempting to reset their password to their current password if (currentPasswordValid) { myCustomNotifier.sendMessage(username, "Cannot reset password to current password."); return { status: 'fail' }; } // check if the user has requested a password reset too often recently const isNotCoolingDown = myCustomCooldownService.canReset(username, 'myCustomService') // send a message to the user in some way so that the user can confirm themselves const msgSendSuccessful = isUser && isNotCoolingDown && myCustomMsgr.send(username, token, tokenId) if ( msgSendSuccessful ) { return { status: 'pending' }; } else { return { status: 'fail' }; } }
Ejemplos
Para ver ejemplos de flujos de registro, inicio de sesión y restablecimiento de contraseña mediante autenticación por correo electrónico y contraseña, consulte los SDK de Realm:
Resumen
La autenticación por email/contraseña permite a los usuarios crear una identidad en tu aplicación basada en un nombre de usuario y una contraseña.
Para habilitar la autenticación por correo electrónico y contraseña, su aplicación debe admitir un método de confirmación por correo electrónico y un método para restablecer la contraseña del usuario. Existen múltiples opciones de implementación para cada uno de estos requisitos.