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
Para que un usuario de correo electrónico y contraseña pueda autenticarse, la aplicación debe registrar y confirmar su nueva cuenta. Al registrar un usuario de correo electrónico y contraseña, se crea un nuevo objeto de usuario. App Services requiere la confirmación de la cuenta. Puede seleccionar uno de los tres métodos para confirmar una nueva cuenta de usuario:
El siguiente diagrama muestra el flujo del proceso para confirmar un usuario:

Estado de la nueva cuenta de usuario
Una cuenta de usuario puede estar en uno de 2 estados: Pendiente y Confirmado.
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á.
Con la cuenta en estado pendiente, el usuario debe confirmar su cuenta antes de iniciar sesión. Cuando el usuario confirma su cuenta, Atlas App Services establece el estado en Confirmed y el usuario puede iniciar sesión.
Si confirma 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
Utilice la confirmación automática solo al desarrollar y probar 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 electrónico 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 los siguientes ajustes para que App Services envíe automáticamente un correo electrónico de confirmación:
Email Confirmation URL: la base de la URL incluida en cada correo electrónico de confirmación. App Services añade un
tokeny untokenIdúnicos a esta URL. Estos sirven como parámetros de consulta para crear un enlace único para cada confirmación. Para confirmar al usuario, primero extraiga estos parámetros de consulta de su URL única. Luego, pase lostokeny lostokenIda la funciónconfirmUserdel SDK del cliente.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: el asunto del correo electrónico que envía App Services. Este valor es opcional; si se omite, App Services utiliza un asunto predeterminado. Los asuntos de confirmación de correo electrónico personalizados 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, puedes usar una función de confirmación en lugar del método de correo electrónico de confirmación integrado. Las funciones de confirmación te permiten crear confirmaciones de correo electrónico totalmente 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' }
Dentro de la función, se define una lógica personalizada para confirmar usuarios. Por ejemplo, la función podría:
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íe mensajes de confirmación a través de un servicio distinto al 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 de usuario personalizada devuelve un objeto con un campo de estado. La siguiente tabla describe los posibles valores 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 no crea una cuenta de usuario. El usuario solo puede volver a intentar confirmar la cuenta registrándose. Dado que la cuenta anterior no existe, el usuario puede reutilizar el mismo nombre de usuario (correo electrónico). |
El siguiente es un ejemplo de una función de confirmación de usuario que:
Comprueba que el correo electrónico proporcionado sea un correo electrónico 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.
Confirmar usuarios automáticamente
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:
Es posible que la dirección de correo electrónico de un usuario confirmado automáticamente no pertenezca realmente a ese usuario (por ejemplo, un usuario podría registrarse como
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).
Tenga cuidado con esta opción. Restablecer de forma segura la contraseña de una cuenta de usuario sin información de contacto válida puede ser muy difícil.
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.

Enviar un correo electrónico de restablecimiento de contraseña
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. App Services añade un
tokeny untokenIdúnicos a esta URL. Estos sirven como parámetros de consulta para crear un enlace único para cada restablecimiento de contraseña. Para restablecer la contraseña del usuario, extraiga estos parámetros de consulta de la URL única del usuario. Pase el token y el 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
Los correos electrónicos de restablecimiento de contraseña no se pueden personalizar actualmente, salvo 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. Esta 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:
Envíe correos electrónicos personalizados de restablecimiento de contraseña desde un dominio específico con una plantilla particular utilizando un servicio externo.
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)
En la función de restablecimiento de contraseña personalizada, se debe pasar un objeto como primer parámetro. La siguiente tabla describe los campos de este objeto:
Campo | Descripción |
|---|---|
| La dirección de correo electrónico del usuario. |
| Una nueva contraseña propuesta para el usuario. Si esta función devuelve el estado correcto, esta es la nueva contraseña del usuario. |
| Un valor único utilizado para actualizar la contraseña del usuario. |
| Un valor único utilizado para confirmar la identidad del usuario mediante la función SDK |
| Un valor booleano que es verdadero si un usuario solicita cambiar su contraseña a su contraseña existente. |
La función de restablecimiento de contraseña personalizada debe devolver un objeto que contenga un campo status. El valor de este campo status puede ser uno de los siguientes:
Estado | Estado de restablecimiento de contraseña | Efecto SDK |
|---|---|---|
| App Services cambia inmediatamente la contraseña del usuario al parámetro | Si la llamada a la función personalizada devuelve un |
| App Services espera a que la aplicación cliente realice alguna acción adicional para completar el restablecimiento de contraseña. Por ejemplo, la función de restablecimiento de contraseña personalizada puede enviar un | El método del SDK que llama a esta función no recibe un valor de retorno, por lo que no gestiona directamente un caso |
| No pasa nada | 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 de correo electrónico/contraseña permite a los usuarios crear una identidad en su 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.