Créer et configurer des champs utilisateur personnalisés

:bookmark: This guide explains how to create and configure custom user fields in Discourse, including how to add them to the signup form, user profiles, and user directory.

:person_raising_hand: Required user level: Administrator

Custom user fields allow you to collect additional information from your users beyond the standard profile fields. These fields can be displayed on user cards, user summary pages, and even retrieved using the Data Explorer plugin. This guide will walk you through the process of creating and configuring custom user fields.

Adding a user field

  1. Go to Admin > Community > User Fields (discourse.example.com/admin/config/user-fields).

  2. If you haven’t created any user fields yet, you’ll see this screen:

  3. Click the “Add user field” button to add a new field.

Choosing a field type

The field type determines the input field users will see on the signup form. Choose based on the kind of information you’re collecting:

Text field

Confirmation

Dropdown

To add options for a dropdown field:

  1. Click on the option input
  2. Type an answer and click “Create”
  3. Repeat for additional options

The completed options should look similar to this:

Setting the field name and description

  • Field Name: Appears before the input on the signup form and user profile
  • Field Description: Appears after the input to help users complete the field

:information_source: Both the field name and description are required to save a field.

Here’s how custom fields appear on the signup form:

Configuring user field options

Field Requirements

  • Optional - Optional fields may be left empty by users
  • For all users - When a field is required by all users, every account, including logged on users will be forced to fill it. This is very useful for cases such as a terms-of-service (ToS) requirement.
  • On signup - All new account will be required to fill the field.

Additionally, at the bottom of the creation form, you’ll find these options:

  • Editable after signup: Allows users to update the field from their profile page
  • Required at signup: Makes the field mandatory during account creation
  • Show on public profile: Displays the field value on the user’s summary page
  • Show on user card: Shows the field value on the user card
  • Searchable: Enables searching for users based on this field’s value in the user directory

Show on public profile

When enabled, the field value will be shown on the user’s profile page:

Show on user card

When enabled, the field value will be displayed on the user card:

Searchable

When enabled, you can search for users based on their custom field values:

Saving and editing fields

  1. Click “Save” to add the field to your site’s list of user fields
  2. To edit a field, click the “Edit” button next to it in the list
  3. To delete a field, click the “Delete” button

Adding custom fields to the user directory

  1. Go to the user directory
  2. Click the wrench icon:

  1. Check the custom user fields you want to display
  2. Click “Save”

The selected custom fields will now appear in the user directory table:

Last edited by @fzngagan 2025-07-17T09:12:38Z

Last checked by @hugh 2024-08-27T04:45:20Z

Check documentPerform check on document:
38 « J'aime »

Je pense qu’il manque deux images sous ces titres :

Je ne suis pas sûr si cela est lié à Images manquantes sur Meta.discourse.org – je posterai également là-bas.

Je peux voir ces images ? (également dans une fenêtre anonyme)

1 « J'aime »

Je ne vois pas ceux-là

Mais le deuxième fonctionne dans ma citation.

Modifier

1 « J'aime »

Il est intéressant de noter que je peux voir la deuxième image dans la citation, mais pas dans la publication originale ^^

1 « J'aime »

Hmm. C’est intéressant. Je pense qu’il y a une solution à venir pour le problème Missing images at Meta.discourse.org, donc j’espère qu’il sera résolu par cela. :crossed_fingers:

2 « J'aime »

Y a-t-il un paramètre que je dois modifier pour spécifier la longueur maximale d’un champ utilisateur personnalisé ? Pour l’instant, dans ce champ « Test » que j’ai créé comme champ utilisateur de test, je ne peux même pas saisir un seul caractère sur mon profil utilisateur (ni même « Test », comme indiqué).

J’aimerais un type de champ : lien / URL, est-ce possible ?

Les URL étant du texte, le champ texte fonctionne techniquement, @Vaping_Community. Cependant, vous demandez peut-être des détails supplémentaires tels que la validation de la valeur ou similaire.

Vous pourriez rechercher ou créer un sujet Feature avec ce que vous avez en tête. :slight_smile:

3 « J'aime »

Y a-t-il des projets pour autoriser plusieurs lignes/un compositeur pour les champs utilisateur personnalisés ? :folded_hands:

Notez que si vous souhaitez intégrer un lien dans l’un des champs utilisateur personnalisés, vous devez utiliser la syntaxe HTML !
<a>lien</a>

Par exemple, pour reconnaître les directives / politiques de la communauté :

1 « J'aime »

Est-il possible d’intégrer une revendication personnalisée de mon SSO Auth0 à un champ personnalisé ? Actuellement, l’utilisateur saisit les informations du champ dans Auth0, puis doit les saisir une seconde fois lors de l’inscription. J’aimerais que la valeur soit mappée si possible.

C’est possible, oui :

Dans votre point de terminaison SSO, vous avez la possibilité de mapper la revendication à la charge utile, par exemple :

const ssoPayload = {
  nonce: nonce,
  email: user.email,
  external_id: user.sub,
  username: user.nickname,
  name: user.name,
  add_groups: a_custom_group,
  'custom.user_field_1': user['https://yourdomain.com/company_id'],
  'custom.user_field_2':  [etc...]
2 « J'aime »

Merci @dax

Existe-t-il un moyen de vérifier le nom du champ dans la base de données ? Par exemple, nous avons un champ prénom, j’ai essayé custom.firstname, custom.first_name et custom.firstName, aucun d’entre eux n’a permis de remplir les champs sur l’écran d’inscription.

J’ai vérifié les journaux d’erreurs pour confirmer que les champs de jeton arrivent comme indiqué ci-dessus.

En approfondissant le code, est-ce que cela ne concerne que l’authentification unique (SSO) Discourse Connect ? Nous utilisons le plugin Auth0.

La syntaxe doit être custom.user_field_x, où x est l’ID numérique du champ affiché dans /admin/config/user-fields/{x}/edit.

Cette fonctionnalité de mappage n’est pas directement disponible dans le plugin Auth0.

Cela dit, il existe toujours des options pour réaliser ce que vous décrivez :

  • créer un composant de thème. Vous pouvez ajouter un petit script front-end qui synchronise automatiquement un champ utilisateur personnalisé Discourse avec une valeur déjà stockée dans Auth0. Par exemple, lorsqu’un utilisateur se connecte et que le champ est vide, le script peut appeler un point de terminaison sécurisé (une petite fonction cloud) qui récupère la valeur du champ depuis Auth0 et met à jour le profil Discourse via l’API.
  • utiliser des outils d’automatisation. Vous pourriez également utiliser des services d’automatisation externes comme Zapier ou Make pour effectuer cette synchronisation en dehors de Discourse. L’avantage est que vous n’avez pas à écrire/maintenir de code, mais seulement à payer pour le service tiers.
  • développement personnalisé. Nous pouvons étendre le plugin Auth0 lui-même pour prendre en charge nativement le mappage des revendications personnalisées dans les champs utilisateur lors de la connexion, ou créer un plugin personnalisé qui fonctionne en parallèle avec le plugin Auth0.

Un inconvénient évident de l’approche par composant de thème est que vous devrez écrire et maintenir vous-même le code personnalisé, tout en faisant attention du point de vue de la sécurité pour éviter d’introduire des bogues ou des vulnérabilités potentielles. Honnêtement, ce n’est pas une solution que je recommanderais pour un site de production comme le vôtre.

Si j’étais à votre place, je pencherais davantage pour la deuxième option, en utilisant des outils tiers, ou j’envisagerais de soumettre une demande de fonctionnalité ou une demande de travail personnalisé (en fonction de l’évaluation de nos chefs de projet) pour améliorer le plugin Auth0 lui-même.

Si vous souhaitez explorer la dernière option, nous pouvons poursuivre la discussion en privé.

1 « J'aime »