Gérer les métadonnées avec des règles

Vous pouvez lire, mettre à jour et supprimer les métadonnées à l’aide des Règles d'Auth0. Dans les sections suivantes, nous nous référerons à cet exemple où l’utilisateur et ses informations sont représentés par l’extrait de code JSON suivant :

{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer" ]
  },
  "user_metadata": {
    "preferences": {
      "color": "blue"
    }
  }
}

Was this helpful?

/

Lire les métadonnées

Vous pouvez lire les métadonnées à l’aide de règles avec Management API. Vous pouvez également rechercher des informations relatives au profil dans user_metadata, telles que :

  • name

  • nickname

  • given_name

  • family_name

Par défaut, les attributs du profil utilisateur fournis par des fournisseurs d’identité autres qu’Auth0 (tels que Google, Facebook ou X) ne sont pas directement modifiables, car ils sont mis à jour par le fournisseur d’identité à chaque fois que l’utilisateur se connecte.

Pour pouvoir modifier les attributs name, nickname, given_name, family_name ou les attributs racine de l’image sur le profil utilisateur normalisé, vous devez configurer votre synchronisation de connexion avec Auth0 de manière à ce que les attributs de l’utilisateur soient mis à jour à partir du fournisseur d’identité uniquement lors de la création du profil utilisateur. Ces attributs racine seront alors disponibles à l’édition individuelle ou par importation en grande quantité.

À titre d’exemple, supposons que les métadonnées suivantes soient stockées pour un utilisateur dont l’adresse courriel est jane.doe@example.com :

{
    "email": "jane.doe@example.com",
    "user_metadata": {
        "hobby": "surfing"
    },
    "app_metadata": {
        "plan": "full"
    }
}

Was this helpful?

/

En utilisant l’exemple de métadonnées ci-dessus, vous pouvez vous référer à des éléments précis de l’ensemble de données dans des règles d'Auth0 ou via un appel à Management API comme suit :

console.log(user.email); // "jane.doe@example.com"
console.log(user.user_metadata.hobby); // "surfing"
console.log(user.app_metadata.plan); // "full"

Was this helpful?

/

Tout extrait JSON valide peut être utilisé comme métadonnées, mais notez que user.app_metadata est Undefined par défaut.

Pour lire les métadonnées disponibles, vous devez accéder à la propriété utilisateur adéquate.

Lire les métadonnées de l’application

Vous pouvez prendre une décision en fonction des rôles utilisateur.

function(user, context, callback){
  user.app_metadata = user.app_metadata || {};
  if (user.app_metadata.roles.indexOf('writer')){
    // code to be executed
  }
  ...
}

Was this helpful?

/

Lire les métadonnées utilisateur

Vous pouvez baser vos décisions sur des préférences précises, par exemple une préférence de couleur :

function(user, context, callback){
  user.user_metadata = user.user_metadata || {};
  if (user.user_metadata.preferences.color === 'black'){
    // code to be executed
  }
  ...
}

Was this helpful?

/

Lire les métadonnées de l’application (clientMetadata)

Les métadonnées de l’application (clientMetadata) constituent une propriété facultative de premier niveau de l’objet context. Les applications existantes n’ont pas de valeur pour cette propriété.

function(user, context, callback){
  context.clientMetadata = context.clientMetadata || {};
  if (context.clientMetadata.usersuppliedkey1 === 'black'){
    // this code would not be executed for the user
  }
  ...
}

Was this helpful?

/

Mettre à jour les métadonnées

Mettre à jour les métadonnées de l’application

Pour ajouter un rôle administratif à l’utilisateur :

function(user, context, callback){
  user.app_metadata = user.app_metadata || {};
  // update the app_metadata that will be part of the response
  user.app_metadata.roles = user.app_metadata.roles || [];
  user.app_metadata.roles.push('administrator');

  // persist the app_metadata update
  auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}

Was this helpful?

/

Il en résulte la représentation JSON suivante des informations du profil utilisateur :

{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer", "administrator" ]
  },
  "user_metadata": {
    "preferences": {
      "color": "blue"
    }
  }
}

Was this helpful?

/

Mettre à jour les métadonnées d’un utilisateur

Pour ajouter la préférence fontSize de l’utilisateur au profil utilisateur :

function(user, context, callback){
  user.user_metadata = user.user_metadata || {};
  // update the user_metadata that will be part of the response
  user.user_metadata.preferences = user.user_metadata.preferences || {};
  user.user_metadata.preferences.fontSize = 12;

  // persist the user_metadata update
  auth0.users.updateUserMetadata(user.user_id, user.user_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}

Was this helpful?

/

Il en résulte la représentation JSON suivante des informations du profil utilisateur :

{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer" ]
  },
  "user_metadata": {
    "preferences": {
      "color": "blue",
      "fontSize": 12
    }
  }
}

Was this helpful?

/

Mettre à jour simultanément les métadonnées de l’application et de l’utilisateur

Pour réduire le temps de traitement de la règle, vous pouvez mettre à jour les app_metadata et les user_metadata dans la même règle :

function(user, context, callback){

  var q = require('q');

  user.app_metadata = user.app_metadata || {};
  user.user_metadata = user.user_metadata || {};
  // update the user_metadata that will be part of the response
  user.user_metadata.preferences = user.user_metadata.preferences || {};
  user.user_metadata.preferences.fontSize = 12;

  // update the app_metadata that will be part of the response
  user.app_metadata.roles = user.app_metadata.roles || [];
  user.app_metadata.roles.push('admin');

  // persist the app_metadata update
  var appMetadataPromise  = auth0.users.updateAppMetadata(user.user_id, user.app_metadata);

  // persist the user_metadata update
  var userMetadataPromise = auth0.users.updateUserMetadata(user.user_id, user.user_metadata);

  // using q library to wait for all promises to complete
  q.all([userMetadataPromise, appMetadataPromise])
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}

Was this helpful?

/

Il en résulte la représentation JSON suivante des informations du profil utilisateur :

{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer", "admin" ]
  },
  "user_metadata": {
    "preferences": {
      "color": "blue",
      "fontSize": 12
    }
  }
}

Was this helpful?

/

Supprimer les métadonnées

Supprimer les propriétés et les valeurs des métadonnées de l’application

Pour supprimer une propriété, il suffit de définir sa valeur sur null.

Exemple de suppression des rôles d’un utilisateur

Pour supprimer les rôles de l’utilisateur, utilisez l’exemple de règle suivant :

function(user, context, callback){
  user.app_metadata = user.app_metadata || {};
  // update the app_metadata that will be part of the response
  user.app_metadata.roles = null;

  // persist the app_metadata update
  auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}

Was this helpful?

/

Il en résulte la représentation JSON suivante du profil utilisateur :

{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": { },
  "user_metadata": {
    "preferences": {
      "color": "blue"
    }
  }
}

Was this helpful?

/

Exemple de suppression d’une seule valeur de propriété

Pour supprimer une seule valeur d’une propriété, supprimez cette valeur spécifique. Par exemple, pour supprimer le rôle writer du profil utilisateur :

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){
    // update the app_metadata that will be part of the response
    user.app_metadata.roles.splice(index, 1);
  }

  // persist the app_metadata update
  auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}

Was this helpful?

/

Il en résulte la représentation JSON suivante du profil utilisateur :

{
  "user_id": "google-oauth2|1234",
  "email": "john.doe@gmail.com",
  "app_metadata": {
    "roles": [ ]
  },
  "user_metadata": {
    "preferences": {
      "color": "blue"
    }
  }
}

Was this helpful?

/

Notez que la propriété roles existe toujours, mais qu’elle ne contient aucune valeur.

Supprimer les propriétés et les valeurs des métadonnées de l’utilisateur

Pour supprimer la préférence de couleur de l’utilisateur :

function(user, context, callback){
  user.user_metadata = user.user_metadata || {};
  // update the user_metadata that will be part of the response
  user.user_metadata.preferences = user.user_metadata.preferences || {};
  delete user.user_metadata.preferences.color;

  // persist the user_metadata update
  auth0.users.updateUserMetadata(user.user_id, user.user_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
  });
}

Was this helpful?

/

Il en résulte la représentation JSON suivante des informations du profil utilisateur :

{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer" ]
  },
  "user_metadata": {
    "preferences": { }
  }
}

Was this helpful?

/

En savoir plus