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

Authenticate Users - Node.js SDK

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 proveen la lógica para gestionar los tokens y los integran en las solicitudes.

Tip

Sesiones de usuario

The Anonymous provider allows users to log in to your application with temporary accounts that have no associated information.

Para iniciar sesión, crea una credencial anónima y pásala 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.

To log in, create an email/password credential with the user's email address and password and pass it to 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.

To log in with an API key, create an API Key credential with a server or user API key and pass it to 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 Custom JWT le permite gestionar la autenticación de usuarios con cualquier sistema de autenticación que devuelva un JSON web token.

Para iniciar sesión, crea una credencial JWT personalizada con un JWT del sistema externo y pásala 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);

The Custom Function authentication provider allows you to handle user authentication by running a function that receives a payload of arbitrary information about a user.

Para iniciar sesión con el proveedor de función personalizada, cree una credencial de función personalizada con un objeto payload y páselo 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

Do Not Store Facebook Profile Picture URLs

Facebook profile picture URLs include the user's access token to grant permission to the image. To ensure security, do not store a URL that includes a user's access token. Instead, access the URL directly from the user's metadata fields when you need to fetch the image.

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

Enable the Google Auth Provider

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.

To set up your App for Google User authentication in your App configuration:

  1. In the Google Cloud Platform console, create an OAuth 2.0 client ID of type "Web application".

  2. Configure your backend App to use that client ID and the associated client secret.

  3. Enable OpenID Connect on the 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. Install the Realm and Google APIs npm packages.

    npm install realm@12 googleapis
  2. Import the packages into your project.

    const Realm = require("realm");
    const { google } = require("googleapis");
  3. Create configuration for Google OAuth 2.0 client and 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. Genera un enlace de inicio de sesión OAuth y pásalo 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. Process the request from the the Google authentication server, which includes an access code in the query string using the Google OAuth 2.0 client's getToken() method. In the callback function, sign in to your App using the 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

Authenticate with Google on a Node.js Server

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.

Puedes necesitar autenticarte con Google en un servidor Node.js para realizar operaciones del lado del servidor en nombre de un usuario, como llamar a una Atlas Function con las credenciales del usuario.

The Apple authentication provider allows you to authenticate users through Sign-in With Apple.

Nota

Habilita 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 JavaScript Sign in with Apple para gestionar la autenticación del usuario y el flujo de redirección desde una aplicación cliente. Una vez autenticado, el SDK de JavaScript de Apple devuelve un token de ID que puedes enviar a tu aplicación Node.js y usar para finalizar el inicio de sesión del usuario en tu aplicación.

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

If you get a Login failed error saying that the token contains an invalid number of segments, verify that you're passing a UTF-8-encoded string version of the 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 realm sin conexión, consulta los Abrir un Realm sincronizado sin conexión docs.

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.

If you send requests outside of the SDK, you need to include the user's access token with each request and manually refresh the token when it expires.

Puedes acceder y actualizar el token de acceso de un usuario con la sesión iniciada en el SDK directamente desde su objeto Realm.User, como se muestra 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;
}

Refresh tokens expire after a set period of time. When the refresh token expires, the access token can no longer be refreshed and the user must log in again.

If the refresh token expires after the realm is open, the device will not be able to sync until the user logs in again. Your sync error handler should implement logic that catches a token expired error when attempting to sync, then redirect users to a login flow.

For information on configuring refresh token expiration, refer to Manage User Sessions in the App Services documentation.

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

Advertencia

Cuando un usuario cierra su sesión, ya no puedes leer ni escribir datos en los realms sincronizados que haya abierto ese usuario. Como resultado, cualquier operación que no se haya completado antes de que el usuario que la inició cierre su sesión no podrá completarse correctamente y es probable que genere un error. Cualquier dato en una operación de escritura que falle de esta manera se perderá.

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

Volver

Create and Delete Users

En esta página