> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Découvrez comment gérer les métadonnées de l’application, les métadonnées de l’utilisateur et les métadonnées d’application cliente à l’aide de Rules.

# Gérer les métadonnées avec Rules

<Warning>
  La date de fin de vie (EOL) de Rules et Hooks est fixée au **18 novembre 2026**, et ils ne sont plus offerts aux nouveaux locataires créés à compter du **16 octobre 2023**. Les locataires existants qui ont des Hooks actifs conserveront l’accès au produit Hooks jusqu’à sa fin de vie.

  Nous vous recommandons fortement d’utiliser Actions pour étendre Auth0. Avec Actions, vous avez accès à des informations de type plus riches, à de la documentation intégrée et à des packages `npm` publics, et vous pouvez connecter des intégrations externes qui améliorent votre expérience globale en matière d’extensibilité. Pour en savoir plus sur ce qu’Actions offre, consultez [Comprendre le fonctionnement d’Auth0 Actions](/fr-CA/docs/customize/actions/actions-overview).

  Pour vous aider dans votre migration, nous proposons des guides pour [migrer de Rules vers Actions](/fr-CA/docs/customize/actions/migrate/migrate-from-rules-to-actions) et [migrer de Hooks vers Actions](/fr-CA/docs/customize/actions/migrate/migrate-from-hooks-to-actions). Nous avons également une page dédiée, [Passer à Actions](https://auth0.com/extensibility/movetoactions), qui présente des comparaisons de fonctionnalités, [une démonstration d’Actions](https://www.youtube.com/watch?v=UesFSY1klrI) et d’autres ressources pour vous accompagner tout au long de votre migration.

  Pour en savoir plus sur la dépréciation de Rules et Hooks, consultez notre billet de blogue : [Preparing for Rules and Hooks End of Life](https://auth0.com/blog/preparing-for-rules-and-hooks-end-of-life/).
</Warning>

Vous pouvez lire, mettre à jour et supprimer des métadonnées à l’aide des [Auth0 Rules](/fr-CA/docs/customize/rules). Dans les sections suivantes, nous nous appuierons sur l’exemple ci-dessous, dans lequel l’utilisateur et ses renseignements sont représentés par l’extrait JSON suivant :

```json lines theme={null}
{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer" ]
  },
  "user_metadata": {
    "preferences": {
      "color": "blue"
    }
  }
}
```

<div id="read-metadata">
  ## Lire les métadonnées
</div>

Vous pouvez lire les métadonnées à l’aide de Rules avec la <Tooltip tip="Management API : un produit qui permet aux clients d’effectuer des tâches administratives." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=Management+API">Management API</Tooltip>. Vous pouvez aussi rechercher des informations liées au profil dans `user_metadata`, par exemple :

* `name`
* `nickname`
* `given_name`
* `family_name`

Par défaut, les attributs du profil utilisateur fournis par des <Tooltip tip="fournisseur d’identité (IdP) : service qui stocke et gère les identités numériques." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=identity+providers">fournisseurs d’identité</Tooltip> autres qu’Auth0 (comme Google, Facebook ou X) ne peuvent pas être modifiés directement, car ils sont mis à jour à partir du fournisseur d’identité chaque fois que l’utilisateur se connecte. Pour en savoir plus sur les attributs provenant des fournisseurs d’identité, consultez [Configurer la connexion du fournisseur d’identité pour les mises à jour du profil utilisateur](/fr-CA/docs/manage-users/user-accounts/user-profiles/configure-connection-sync-with-auth0).

Pour pouvoir modifier les attributs racine `name`, `nickname`, `given_name`, `family_name` ou `picture` dans le profil utilisateur normalisé, vous devez [configurer la synchronisation de votre connexion avec Auth0](/fr-CA/docs/manage-users/user-accounts/user-profiles/configure-connection-sync-with-auth0) afin que les attributs utilisateur soient mis à jour à partir du fournisseur d’identité uniquement lors de la création du profil utilisateur. Ces attributs racine pourront alors être modifiés individuellement ou par importation en masse

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

```json lines theme={null}
{
    "email": "jane.doe@example.com",
    "user_metadata": {
        "hobby": "surfing"
    },
    "app_metadata": {
        "plan": "full"
    }
}
```

En utilisant l’exemple de métadonnées ci-dessus, vous pouvez accéder à des éléments précis de l’ensemble de données dans les [Auth0 Rules](/fr-CA/docs/customize/rules) ou au moyen d’un appel à la [Management API](/fr-CA/docs/manage-users/user-accounts/metadata), comme suit :

```js lines theme={null}
console.log(user.email); // "jane.doe@example.com"
console.log(user.user_metadata.hobby); // "surfing"
console.log(user.app_metadata.plan); // "full"
```

N’importe quel extrait JSON valide peut servir de métadonnées, mais notez que `user.app_metadata` vaut `Undefined` par défaut.

Pour lire les métadonnées disponibles, vous devrez accéder à la bonne propriété de l’utilisateur.

<div id="read-app-metadata">
  ### Lire les métadonnées de l’application
</div>

Vous pouvez prendre une décision selon les rôles de l’utilisateur :

```javascript lines theme={null}
function(user, context, callback){
  user.app_metadata = user.app_metadata || {};
  if (user.app_metadata.roles.indexOf('writer')){
    // code à exécuter
  }
  ...
}
```

<div id="read-user-metadata">
  ### Lire les métadonnées de l’utilisateur
</div>

Vous pouvez prendre des décisions en fonction de préférences précises, par exemple une préférence de couleur :

```javascript lines theme={null}
function(user, context, callback){
  user.user_metadata = user.user_metadata || {};
  if (user.user_metadata.preferences.color === 'black'){
    // code à exécuter
  }
  ...
}
```

<div id="read-application-metadata-clientmetadata">
  ### Lire les métadonnées de l’application (clientMetadata)
</div>

Les métadonnées de l’application (`clientMetadata`) correspondent à une propriété facultative de premier niveau de l’objet `context`. Les applications existantes n’ont aucune valeur définie pour cette propriété.

```javascript lines theme={null}
function(user, context, callback){
  context.clientMetadata = context.clientMetadata || {};
  if (context.clientMetadata.usersuppliedkey1 === 'black'){
    // ce code ne serait pas exécuté pour l'utilisateur
  }
  ...
}
```

<div id="update-metadata">
  ## Mettre à jour les métadonnées
</div>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Utilisez Rules pour faire correspondre les attributs SAML qu’Auth0 reçoit de l’IdP à `user_metadata` ou à `app_metadata`.
</Callout>

<div id="update-app-metadata">
  ### Mettre à jour les métadonnées de l’application
</div>

Pour ajouter un rôle d’administrateur à l’utilisateur :

```javascript lines theme={null}
function(user, context, callback){
  user.app_metadata = user.app_metadata || {};
  // mettre à jour l'app_metadata qui fera partie de la réponse
  user.app_metadata.roles = user.app_metadata.roles || [];
  user.app_metadata.roles.push('administrator');

  // enregistrer la mise à jour de l'app_metadata
  auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}
```

Cela donne la représentation JSON suivante des renseignements du profil utilisateur :

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

<div id="update-user-metadata">
  ### Mettre à jour les métadonnées de l’utilisateur
</div>

Pour ajouter la préférence `fontSize` de l’utilisateur à son profil utilisateur :

```javascript lines theme={null}
function(user, context, callback){
  user.user_metadata = user.user_metadata || {};
  // mettre à jour le user_metadata qui fera partie de la réponse
  user.user_metadata.preferences = user.user_metadata.preferences || {};
  user.user_metadata.preferences.fontSize = 12;

  // sauvegarder la mise à jour du user_metadata
  auth0.users.updateUserMetadata(user.user_id, user.user_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}
```

On obtient la représentation JSON suivante du profil utilisateur :

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

<div id="update-app-and-user-metadata-simultaneously">
  ### Mettre à jour simultanément les métadonnées de l’application et celles de l’utilisateur
</div>

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

```javascript lines expandable theme={null}
function(user, context, callback){

  var q = require('q');

  user.app_metadata = user.app_metadata || {};
  user.user_metadata = user.user_metadata || {};
  // mettre à jour le user_metadata qui fera partie de la réponse
  user.user_metadata.preferences = user.user_metadata.preferences || {};
  user.user_metadata.preferences.fontSize = 12;

  // mettre à jour le app_metadata qui fera partie de la réponse
  user.app_metadata.roles = user.app_metadata.roles || [];
  user.app_metadata.roles.push('admin');

  // sauvegarder la mise à jour du app_metadata
  var appMetadataPromise  = auth0.users.updateAppMetadata(user.user_id, user.app_metadata);

  // sauvegarder la mise à jour du user_metadata
  var userMetadataPromise = auth0.users.updateUserMetadata(user.user_id, user.user_metadata);

  // utiliser la bibliothèque q pour attendre que toutes les promesses soient résolues
  q.all([userMetadataPromise, appMetadataPromise])
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}
```

Cela donne la représentation JSON suivante des détails du profil utilisateur :

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

<div id="delete-metadata">
  ## Supprimer les métadonnées
</div>

<div id="delete-app-metadata-properties-and-values">
  ### Supprimer les propriétés et les valeurs des métadonnées d’application
</div>

Pour supprimer une propriété, définissez sa valeur à `null`.

<div id="delete-users-roles-example">
  #### Exemple de suppression des rôles de l’utilisateur
</div>

Pour supprimer les rôles de l’utilisateur, utilisez la Rule d’exemple suivante :

```javascript lines theme={null}
function(user, context, callback){
  user.app_metadata = user.app_metadata || {};
  // mettre à jour l'app_metadata qui fera partie de la réponse
  user.app_metadata.roles = null;

  // enregistrer la mise à jour de l'app_metadata
  auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}
```

Vous obtenez ainsi la représentation JSON suivante du profil utilisateur :

```json lines theme={null}
{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": { },
  "user_metadata": {
    "preferences": {
      "color": "blue"
    }
  }
}
```

<div id="delete-single-property-value-example">
  #### Exemple de suppression d’une seule valeur de propriété
</div>

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

```javascript lines theme={null}
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){
    // mettre à jour l'app_metadata qui fera partie de la réponse
    user.app_metadata.roles.splice(index, 1);
  }

  // enregistrer la mise à jour de l'app_metadata
  auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}
```

On obtient la représentation JSON suivante du profil utilisateur :

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

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

<div id="delete-user-metadata-properties-and-values">
  ### Supprimer les propriétés et les valeurs des métadonnées de l’utilisateur
</div>

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

```javascript lines theme={null}
function(user, context, callback){
  user.user_metadata = user.user_metadata || {};
  // mettre à jour le user_metadata qui fera partie de la réponse
  user.user_metadata.preferences = user.user_metadata.preferences || {};
  delete user.user_metadata.preferences.color;

  // sauvegarder la mise à jour du user_metadata
  auth0.users.updateUserMetadata(user.user_id, user.user_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
  });
}
```

Cela donne la représentation JSON suivante des détails du profil utilisateur :

```json lines theme={null}
{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer" ]
  },
  "user_metadata": {
    "preferences": { }
  }
}
```

<div id="learn-more">
  ## En savoir plus
</div>

* [Utiliser le Management API dans les Rules](/fr-CA/docs/customize/rules/use-management-api)
* [Propriétés de l’objet de contexte dans les Rules](/fr-CA/docs/customize/rules/context-object)
* [Auth0 Rules](/fr-CA/docs/customize/rules)
