Criando e configurando campos de usuário personalizados

: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 curtidas

Acho que faltam duas imagens nos seguintes títulos:

Não tenho certeza se está relacionado a Imagens ausentes no Meta.discourse.org – postarei lá também.

Consigo ver essas imagens? (também em uma janela anônima)

1 curtida

Eu não consigo ver isso

Mas o segundo funciona na minha citação.

Editar

1 curtida

Curiosamente, consigo ver a segunda imagem na citação, mas não na postagem original^^

1 curtida

Hmm. Isso é interessante. Acho que há uma correção chegando para o problema Missing images at Meta.discourse.org, então espero que seja resolvido por isso. :crossed_fingers:

2 curtidas

Existe uma configuração que preciso modificar para especificar o comprimento máximo de um campo de usuário personalizado? No momento, neste campo “Teste” que criei como um campo de usuário de teste, não consigo inserir nem mesmo um caractere no meu perfil de usuário (ou mesmo “Teste”, como mostrado).

Eu adoraria um tipo de campo: link / URL, isso é possível?

Como as URLs são texto, o campo de texto tecnicamente funciona, @Vaping_Community. No entanto, você pode estar pedindo detalhes adicionais, como validação de valor ou similar.

Você pode pesquisar ou criar um tópico de Feature com o que você tem em mente. :slight_smile:

3 curtidas

Existem planos para permitir múltiplas linhas/compositor para campos de usuário personalizados? :folded_hands:

Note que se você quiser incorporar um link em um dos campos de usuário personalizados, você precisa usar a sintaxe HTML!
<a> href="url">texto do link</a>

Por exemplo, para reconhecer as diretrizes/políticas da comunidade:

1 curtida

É possível vincular uma reivindicação personalizada do meu Auth0 SSO a um campo personalizado? Atualmente, o usuário insere as informações do campo no Auth0 e, em seguida, precisa inseri-las uma segunda vez ao se registrar. Gostaria que o valor fosse mapeado, se possível.

É possível, sim:

Dentro do seu endpoint SSO, você tem a capacidade de mapear a reivindicação para a carga útil, por exemplo:

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 curtidas

Obrigado @dax

Existe uma maneira de verificar o nome do campo no banco de dados? Por exemplo, temos um campo de nome, tentei custom.firstname, custom.first_name e custom.firstName, nenhum dos quais resultou no preenchimento dos campos na tela de cadastro.

Verifiquei os logs de erro para confirmar que os campos de token estão chegando como mostrado acima.

aprofundando mais no código aqui, isso é apenas para um Discourse Connect SSO? Estamos usando o plugin Auth0

A sintaxe precisa ser custom.user_field_x, onde x é o ID numérico do campo mostrado em /admin/config/user-fields/{x}/edit.

Esse recurso de mapeamento não está disponível diretamente no plugin Auth0.

Dito isso, ainda existem opções para alcançar o que você está descrevendo:

  • criar um componente de tema. Você pode adicionar um pequeno script front-end que sincroniza automaticamente um campo de usuário personalizado do Discourse com um valor já armazenado no Auth0. Por exemplo, quando um usuário faz login e o campo está vazio, o script pode chamar um endpoint seguro (uma pequena função de nuvem) que busca o valor do campo do Auth0 e atualiza o perfil do Discourse via API.
  • usar ferramentas de automação. Você também pode usar serviços de automação externos como Zapier ou Make para realizar essa sincronização fora do Discourse. A vantagem é que você não precisa escrever/manter código, apenas pagar pelo serviço de terceiros.
  • desenvolvimento personalizado. Podemos estender o próprio plugin Auth0 para suportar nativamente o mapeamento de claims personalizados em campos de usuário no login, ou construir um plugin personalizado que funcione em conjunto com o plugin Auth0.

Uma desvantagem clara da abordagem do componente de tema é que você precisaria escrever e manter o código personalizado, além de ter cuidado do ponto de vista de segurança para evitar introduzir possíveis bugs ou vulnerabilidades. Honestamente, não é uma solução que eu recomendaria para um site de produção como o seu.

Se eu estivesse em sua posição, eu tenderia mais para a segunda opção, usando ferramentas de terceiros, ou consideraria enviar uma solicitação de recurso ou solicitação de trabalho personalizado (dependendo da avaliação de nossos gerentes de projeto) para aprimorar o próprio plugin Auth0.

Se você estiver interessado em explorar a última opção, podemos continuar a discussão em particular.

1 curtida