Docs Menu
Docs Home
/ /
Administrar usuarios

Autenticar usuarios - SDK de Node.js

Realm proporciona una API para autenticar usuarios en una aplicación con cualquier proveedor de autenticación habilitado. Crear una instancia Credentials objeto y páselo al método app.login() para autenticar el inicio de sesión de un usuario y crear un objeto User.

Atlas App Services gestiona sesiones con tokens de acceso y tokens de actualización. Los SDK de cliente proporcionan la lógica para gestionar los tokens y proporcionarles solicitudes.

Tip

Sesiones de usuario

El proveedor anónimo permite a los usuarios iniciar sesión en su aplicación con cuentas temporales que no tienen información asociada.

Para iniciar sesión, cree una credencial anónima y pásela a App.logIn():

// Create an anonymous credential
const credentials = Realm.Credentials.anonymous();
const user = await app.logIn(credentials);
// Create an anonymous credential
const credentials = Realm.Credentials.anonymous();
const user = await app.logIn(credentials);

El proveedor de autenticación de correo electrónico/contraseña permite a los usuarios iniciar sesión en su aplicación con una dirección de correo electrónico y una contraseña.

Para iniciar sesión, cree una credencial de correo electrónico/contraseña con la dirección de correo electrónico y la contraseña del usuario y pásela a App.logIn():

// Create an email/password credential
const credentials = Realm.Credentials.emailPassword(
"someone@example.com",
"Pa55w0rd!"
);
const user = await app.logIn(credentials);
// Create an email/password credential
const credentials = Realm.Credentials.emailPassword(
"someone@example.com",
"Pa55w0rd!"
);
const user = await app.logIn(credentials);

El proveedor de autenticación de clave API permite que los procesos del servidor accedan a su aplicación directamente o en nombre de un usuario.

Para iniciar sesión con una clave API, cree una credencial de clave API con una clave API de servidor o usuario y pásela a App.logIn():

// Get the API key from the local environment
const apiKey = process.env?.appServicesApiKey;
if (!apiKey) {
throw new Error("Could not find a Server API Key.");
}
// Create an api key credential
const credentials = Realm.Credentials.apiKey(apiKey);
const user = await app.logIn(credentials);
// Get the API key from the local environment.
const apiKey = process.env?.appServicesApiKey;
if (!apiKey) {
throw new Error("Could not find a Server API Key.");
}
// Create an api key credential.
const credentials = Realm.Credentials.apiKey(apiKey);
const user = await app.logIn(credentials);

El proveedor de autenticación JWT personalizado le permite gestionar la autenticación de usuarios con cualquier sistema de autenticación que devuelva un token web JSON.

Para iniciar sesión, cree una credencial JWT personalizada con un JWT del sistema externo y páselo a App.logIn():

// Create a custom jwt credential
const jwt = await authenticateWithExternalSystem();
const credentials = Realm.Credentials.jwt(jwt);
const user = await app.logIn(credentials);
// Create a custom jwt credential.
const jwt = await authenticateWithExternalSystem();
const credentials = Realm.Credentials.jwt(jwt);
const user = await app.logIn(credentials);

El proveedor de autenticación de funciones personalizadas le permite gestionar la autenticación de usuarios ejecutando una función que recibe una carga útil de información arbitraria sobre un usuario.

Para iniciar sesión con el proveedor de funciones personalizadas, cree una credencial de función personalizada con un objeto de carga útil y pásela a App.logIn():

// Create a custom function credential
const credentials = Realm.Credentials.function({
username: "ilovemongodb",
});
const user = await app.logIn(credentials);
// Create a custom function credential.
const credentials = Realm.Credentials.function({
username: "ilovemongodb",
});
const user = await app.logIn(credentials);

El proveedor de autenticación de Facebook le permite autenticar usuarios a través de una aplicación de Facebook utilizando su cuenta de Facebook existente.

Importante

Habilitar el proveedor de autenticación de Facebook

Para iniciar sesión un usuario con su cuenta de Facebook existente, debe configurar y habilitar el proveedor de autenticación de Facebook para su aplicación.

Importante

No almacene las URL de las imágenes de perfil de Facebook

Las URL de las fotos de perfil de Facebook incluyen el token de acceso del usuario para otorgar permiso a la imagen. Para garantizar la seguridad, no guardes una URL que incluya el token de acceso del usuario. En su lugar, accede a la URL directamente desde los campos de metadatos del usuario cuando necesites obtener la imagen.

Puedes utilizar el SDK oficial de Facebook Para gestionar la autenticación del usuario y redirigir el flujo desde una aplicación cliente. Una vez autenticado, el SDK de Facebook devuelve un token de acceso que puedes enviar a tu aplicación Node.js y usar para finalizar el inicio de sesión del usuario.

// Get the access token from the Facebook SDK
const { accessToken } = FB.getAuthResponse();
// Define credentials with the access token from the Facebook SDK
const credentials = Realm.Credentials.facebook(accessToken);
// Log the user in to your app
await app.logIn(credentials);

El proveedor de autenticación Google le permite autenticar usuarios mediante un proyecto de Google utilizando su cuenta de Google existente.

Nota

Habilitar el proveedor de autenticación de Google

Para autenticar a un usuario de Google, debes configurar el proveedor de autenticación de Google. Debes habilitar OpenID Connect para utilizar el Authentication Provider de Google con el Node.js SDK.

Para configurar su aplicación para la autenticación de usuario de Google en la configuración de su aplicación:

  1. En la consola de Google Cloud Platform, cree 2 un0 ID de cliente OAuth. del tipo "Aplicación web".

  2. Configure su aplicación backend para usar ese ID de cliente y el secreto de cliente asociado.

  3. Habilitar OpenID Connect en el backend.

Usa la librería de autenticación de Google para nodo.js oficial para gestionar el flujo de autenticación y redirección de usuarios desde una aplicación cliente de nodo.js:

  1. Instale los paquetes npm de las API de Google y Realm.

    npm install realm@12 googleapis
  2. Importa los paquetes a tu proyecto.

    const Realm = require("realm");
    const { google } = require("googleapis");
  3. Cree una configuración para el cliente Google OAuth 2.0 y Realm.

    // Configure and instantiate Google OAuth2.0 client
    const oauthConfig = {
    client_id: GOOGLE_CLIENT_ID,
    project_id: GOOGLE_PROJECT_ID,
    auth_uri: "https://accounts.google.com/o/oauth2/auth",
    token_uri: "https://oauth2.googleapis.com/token",
    auth_provider_x509_cert_url: "https://www.googleapis.com/oauth2/v1/certs",
    client_secret: GOOGLE_CLIENT_SECRET,
    redirect_uris: [`${BASE_URL}/auth/google/callback`],
    JWTsecret: "secret",
    scopes: [
    "https://www.googleapis.com/auth/userinfo.email",
    "https://www.googleapis.com/auth/userinfo.profile",
    "openid",
    // any other scopes you might require. View all here - https://developers.google.com/identity/protocols/oauth2/scopes
    ],
    };
    const OAuth2 = google.auth.OAuth2;
    const oauth2Client = new OAuth2(
    oauthConfig.client_id,
    oauthConfig.client_secret,
    oauthConfig.redirect_uris[0]
    );
    // Instantiate Realm app
    const realmApp = new Realm.App({
    id: REALM_APP_ID,
    });
  4. Genere un enlace de inicio de sesión OAuth y páselo al cliente de la aplicación.

    // generate OAuth 2.0 log in link
    const loginLink = oauth2Client.generateAuthUrl({
    access_type: "offline", // Indicates that we need to be able to access data continuously without the user constantly giving us consent
    scope: oauthConfig.scopes,
    });
  5. Procesa la solicitud del servidor de autenticación de Google, que incluye un código de acceso en la cadena de consulta, mediante el método getToken() del cliente Google OAuth 2.0. En la función de devolución de llamada, inicia sesión en tu aplicación con id_token.

    // Get Google token and use it to sign into Realm
    oauth2Client.getToken(authCodeFromQueryString, async function (
    error,
    token
    ) {
    if (error) return errorHandler(error);
    try {
    const credential = Realm.Credentials.google({
    idToken: token.id_token,
    });
    const user = await realmApp.logIn(credential);
    console.log("signed in as Realm user", user.id);
    } catch (error) {
    errorHandler(error);
    }
    });

Ejemplo

Autenticarse con Google en un servidor Node.js

Consulta el código de un servidor de ejemplo en nodo.js que implementa Acceder con Google. Todo el 2.0 OAuth de Google. La implementación está en el archivo server.js.

El ejemplo utiliza Express para el enrutamiento y la biblioteca de autenticación de Google para Node.js.

Es posible que desees autenticarte con Google en un servidor Node.js para realizar operaciones del lado del servidor en nombre de un usuario, como llamar a una función Atlas con las credenciales de un usuario.

El proveedor de autenticación de Apple le permite autenticar usuarios a través de Iniciar sesión con Apple.

Nota

Habilitar el proveedor de autenticación de Apple

Para autenticar a un usuario de Apple, debe configurar el proveedor de autenticación Apple.

Puedes usar el SDK oficial de Iniciar sesión con Apple JS para gestionar la autenticación del usuario y redirigir el flujo desde una aplicación cliente. Una vez autenticado, el SDK de Apple JS devuelve un token de ID que puedes enviar a tu app Node.js y usar para finalizar el inicio de sesión del usuario.

// Get the ID token from the Apple SDK
const { id_token } = await AppleID.auth.signIn();
// Define credentials with the ID token from the Apple SDK
const credentials = Realm.Credentials.apple(id_token);
// Log the user in to your app
const user = await app.logIn(credentials);

Tip

Si recibe un error Login failed que indica que token contains an invalid number of segments, verifique que esté pasando una versión de cadena codificada en UTF-8del JWT.

Cuando tu aplicación Realm autentica a un usuario, almacena en caché las credenciales del usuario. Puedes comprobar si existen credenciales de usuario para omitir el flujo de inicio de sesión y acceder al usuario almacenado en caché. Usa esto para abrir un realm sin conexión.

Nota

El inicio de sesión inicial requiere una conexión de red

Cuando un usuario se registra en tu aplicación o inicia sesión por primera vez con una cuenta existente en un cliente, este debe tener conexión de red. Comprobar las credenciales de usuario en caché permite abrir un reino sin conexión, pero solo si el usuario ha iniciado sesión previamente con conexión.

// Log user into your App Services App.
// On first login, the user must have a network connection.
const getUser = async () => {
// If the device has no cached user credentials, log in.
if (!app.currentUser) {
const credentials = Realm.Credentials.anonymous();
await app.logIn(credentials);
}
// If the app is offline, but credentials are
// cached, return existing user.
return app.currentUser!;
};

Para aprender a usar el usuario en caché en la configuración de sincronización y acceder a un reino sin conexión, lea la documentación Abrir un reino sincronizado sin conexión.

Cuando un usuario inicia sesión, Atlas App Services crea un token de acceso que le otorga acceso a su aplicación. El SDK de Realm administra automáticamente los tokens de acceso, los actualiza cuando caducan e incluye un token de acceso válido para el usuario actual con cada solicitud. Realm no actualiza automáticamente el token de actualización. Cuando este caduque, el usuario deberá volver a iniciar sesión.

Si envía solicitudes fuera del SDK, debe incluir el token de acceso del usuario con cada solicitud y actualizar manualmente el token cuando caduque.

Puede acceder y actualizar el token de acceso de un usuario que haya iniciado sesión en el SDK desde su objeto Realm.User, como en el siguiente ejemplo:

// Gets a valid user access token to authenticate requests
async function getValidAccessToken(user) {
// An already logged in user's access token might be stale. To
// guarantee that the token is valid, refresh it if necessary.
await user.refreshCustomData();
return user.accessToken;
}
// Gets a valid user access token to authenticate requests
async function getValidAccessToken(user: Realm.User) {
// An already logged in user's access token might be stale. To
// guarantee that the token is valid, refresh it if necessary.
await user.refreshCustomData();
return user.accessToken;
}

Los tokens de actualización caducan tras un periodo determinado. Cuando caducan, el token de acceso ya no se puede actualizar y el usuario debe volver a iniciar sesión.

Si el token de actualización caduca después de abrir el dominio, el dispositivo no podrá sincronizarse hasta que el usuario vuelva a iniciar sesión. El controlador de errores de sincronización debe implementar una lógica que detecte un error de token caducado al intentar sincronizar y luego redirija a los usuarios a un flujo de inicio de sesión.

Para obtener información sobre cómo configurar la expiración del token de actualización, consulte Administrar sesiones de usuario en la documentación de App Services.

Para desconectar a cualquier usuario, llama al User.logOut() en su instancia de usuario.

Advertencia

Cuando un usuario cierra sesión, ya no se pueden leer ni escribir datos en los dominios sincronizados que haya abierto. Por lo tanto, cualquier operación que no se haya completado antes de que el usuario cierre sesión no podrá completarse correctamente y probablemente generará un error. Los datos de una operación de escritura que falle de esta manera se perderán.

// Log out the current user
await app.currentUser?.logOut();

Volver

Crear y eliminar usuarios

En esta página