Saltar al contenido principal
La fecha de fin de vida (EOL) de Rules y Hooks será el 18 de noviembre de 2026, y ya no están disponibles para nuevos inquilinos creados a partir del 16 de octubre de 2023. Los inquilinos existentes con Hooks activos conservarán el acceso al producto Hooks hasta su fin de vida.Le recomendamos encarecidamente que use Actions para extender Auth0. Con Actions, tiene acceso a información de tipos más completa, documentación integrada y paquetes públicos de npm, y puede conectar integraciones externas que mejoran su experiencia general de extensibilidad. Para obtener más información sobre lo que ofrece Actions, consulte Comprenda cómo funcionan las Actions de Auth0.Para ayudarle con la migración, ofrecemos guías que le ayudarán a migrar de Rules a Actions y migrar de Hooks a Actions. También contamos con una página dedicada, Move to Actions, que destaca comparaciones de funcionalidades, una demostración de Actions y otros recursos para ayudarle en su proceso de migración.Para obtener más información sobre la deprecación de Rules y Hooks, lea nuestra entrada de blog: Preparación para el fin de vida de Rules y Hooks.
Puede leer, actualizar y eliminar metadatos mediante Auth0 Rules. En las siguientes secciones, nos referiremos a este ejemplo, en el que el usuario y su información están representados por el siguiente fragmento de JSON:
{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer" ]
  },
  "user_metadata": {
    "preferences": {
      "color": "blue"
    }
  }
}

Leer metadatos

Puede leer metadatos mediante Rules con la . También puede buscar información relacionada con el perfil en user_metadata, como:
  • name
  • nickname
  • given_name
  • family_name
De forma predeterminada, los atributos del perfil de usuario proporcionados por distintos de Auth0 (como Google, Facebook o X) no se pueden editar directamente porque se actualizan desde el proveedor de identidad cada vez que el usuario inicia sesión. Para obtener más información sobre los atributos de los proveedores de identidad, consulte Configurar la conexión del proveedor de identidad para las actualizaciones del perfil de usuario. Para poder editar los atributos raíz name, nickname, given_name, family_name o picture del perfil de usuario normalizado, debe configurar la sincronización de su conexión con Auth0 para que los atributos del usuario se actualicen desde el proveedor de identidad solo cuando se cree el perfil de usuario. Estos atributos raíz quedarán disponibles para editarlos individualmente o mediante importaciones masivas Como ejemplo, suponga que los siguientes metadatos están almacenados para un usuario con la dirección de correo electrónico jane.doe@example.com:
{
    "email": "jane.doe@example.com",
    "user_metadata": {
        "hobby": "surfing"
    },
    "app_metadata": {
        "plan": "full"
    }
}
Con el ejemplo de metadatos anterior, puede consultar elementos específicos del conjunto de datos en Auth0 Rules o mediante una llamada a la Management API, de la siguiente manera:
console.log(user.email); // "jane.doe@example.com"
console.log(user.user_metadata.hobby); // "surfing"
console.log(user.app_metadata.plan); // "full"
Cualquier fragmento JSON válido puede utilizarse como metadatos, pero ten en cuenta que user.app_metadata es Undefined de forma predeterminada. Para leer los metadatos disponibles, tendrás que acceder a la propiedad correcta del usuario.

Leer los metadatos de la aplicación

Puede decidir en función de los roles del usuario:
function(user, context, callback){
  user.app_metadata = user.app_metadata || {};
  if (user.app_metadata.roles.indexOf('writer')){
    // código a ejecutar
  }
  ...
}

Leer los metadatos del usuario

Puede basar sus decisiones en preferencias específicas, como la preferencia de color:
function(user, context, callback){
  user.user_metadata = user.user_metadata || {};
  if (user.user_metadata.preferences.color === 'black'){
    // código a ejecutar
  }
  ...
}

Leer los metadatos de la aplicación (clientMetadata)

Los metadatos de la aplicación (clientMetadata) son una propiedad opcional de nivel superior del objeto context. Las aplicaciones existentes no tendrán ningún valor asignado a esta propiedad.
function(user, context, callback){
  context.clientMetadata = context.clientMetadata || {};
  if (context.clientMetadata.usersuppliedkey1 === 'black'){
    // este código no se ejecutaría para el usuario
  }
  ...
}

Actualizar metadatos

Usa Rules para asignar los atributos SAML que Auth0 recibe del IdP a user_metadata o app_metadata.

Actualizar los metadatos de la aplicación

Para agregar un rol de administrador al usuario:
function(user, context, callback){
  user.app_metadata = user.app_metadata || {};
  // actualizar el app_metadata que formará parte de la respuesta
  user.app_metadata.roles = user.app_metadata.roles || [];
  user.app_metadata.roles.push('administrator');

  // conservar la actualización de app_metadata
  auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}
Esto genera la siguiente representación JSON de los detalles del perfil de usuario:
{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer", "administrator" ]
  },
  "user_metadata": {
    "preferences": {
      "color": "blue"
    }
  }
}

Actualizar los metadatos del usuario

Para agregar la preferencia fontSize del usuario al perfil de usuario:
function(user, context, callback){
  user.user_metadata = user.user_metadata || {};
  // actualizar el user_metadata que formará parte de la respuesta
  user.user_metadata.preferences = user.user_metadata.preferences || {};
  user.user_metadata.preferences.fontSize = 12;

  // guardar la actualización de user_metadata
  auth0.users.updateUserMetadata(user.user_id, user.user_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}
Esto da como resultado la siguiente representación JSON del perfil de usuario:
{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer" ]
  },
  "user_metadata": {
    "preferences": {
      "color": "blue",
      "fontSize": 12
    }
  }
}

Actualizar al mismo tiempo los metadatos de la aplicación y del usuario

Para reducir el tiempo de procesamiento de la Rule, puede actualizar tanto app_metadata como user_metadata en la misma Rule:
function(user, context, callback){

  var q = require('q');

  user.app_metadata = user.app_metadata || {};
  user.user_metadata = user.user_metadata || {};
  // actualizar el user_metadata que formará parte de la respuesta
  user.user_metadata.preferences = user.user_metadata.preferences || {};
  user.user_metadata.preferences.fontSize = 12;

  // actualizar el app_metadata que formará parte de la respuesta
  user.app_metadata.roles = user.app_metadata.roles || [];
  user.app_metadata.roles.push('admin');

  // guardar la actualización de app_metadata
  var appMetadataPromise  = auth0.users.updateAppMetadata(user.user_id, user.app_metadata);

  // guardar la actualización de user_metadata
  var userMetadataPromise = auth0.users.updateUserMetadata(user.user_id, user.user_metadata);

  // usar la librería q para esperar a que todas las promesas se completen
  q.all([userMetadataPromise, appMetadataPromise])
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}
Esto produce la siguiente representación JSON de los detalles del perfil de usuario:
{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer", "admin" ]
  },
  "user_metadata": {
    "preferences": {
      "color": "blue",
      "fontSize": 12
    }
  }
}

Eliminar metadatos

Eliminar propiedades y valores de los metadatos de la aplicación

Para eliminar una propiedad, establezca su valor en null.

Ejemplo para eliminar los roles del usuario

Para eliminar los roles del usuario, use la siguiente Rule de ejemplo:
function(user, context, callback){
  user.app_metadata = user.app_metadata || {};
  // actualizar el app_metadata que formará parte de la respuesta
  user.app_metadata.roles = null;

  // conservar la actualización del app_metadata
  auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}
Esto da lugar a la siguiente representación JSON del perfil de usuario:
{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": { },
  "user_metadata": {
    "preferences": {
      "color": "blue"
    }
  }
}

Ejemplo de cómo eliminar un único valor de una propiedad

Para eliminar un único valor de una propiedad, quite ese valor concreto. Por ejemplo, para quitar el rol writer del perfil de usuario:
function(user, context, callback){
  user.app_metadata = user.app_metadata || {};
  user.app_metadata.roles = user.app_metadata.roles || [];

  var index = user.app_metadata.roles.indexOf('writer');

  if (index !== -1){
    // actualizar el app_metadata que formará parte de la respuesta
    user.app_metadata.roles.splice(index, 1);
  }

  // guardar la actualización del app_metadata
  auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}
Esto da lugar a la siguiente representación JSON del perfil de usuario:
{
  "user_id": "google-oauth2|1234",
  "email": "john.doe@gmail.com",
  "app_metadata": {
    "roles": [ ]
  },
  "user_metadata": {
    "preferences": {
      "color": "blue"
    }
  }
}
Ten en cuenta que la propiedad roles sigue existiendo, pero no contiene ningún valor.

Eliminar propiedades y valores de los metadatos del usuario

Para eliminar la preferencia de color del usuario:
function(user, context, callback){
  user.user_metadata = user.user_metadata || {};
  // actualizar el user_metadata que formará parte de la respuesta
  user.user_metadata.preferences = user.user_metadata.preferences || {};
  delete user.user_metadata.preferences.color;

  // guardar la actualización de user_metadata
  auth0.users.updateUserMetadata(user.user_id, user.user_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
  });
}
El resultado es la siguiente representación JSON de los detalles del perfil de usuario:
{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer" ]
  },
  "user_metadata": {
    "preferences": { }
  }
}

Más información