Criação e configuração de campos de usuário personalizados

:bookmark: Este guia explica como criar e configurar campos de usuário personalizados no Discourse, incluindo como adicioná-los ao formulário de inscrição, perfis de usuário e diretório de usuários.

:person_raising_hand: Nível de usuário necessário: Administrador

Os campos de usuário personalizados permitem que você colete informações adicionais de seus usuários além dos campos de perfil padrão. Esses campos podem ser exibidos em cartões de usuário, páginas de resumo de usuário e até mesmo recuperados usando o plugin Data Explorer. Este guia o guiará pelo processo de criação e configuração de campos de usuário personalizados.

Adicionando um campo de usuário

  1. Vá para Admin > Comunidade > Campos de Usuário (discourse.example.com/admin/config/user-fields).

  2. Se você ainda não criou nenhum campo de usuário, verá esta tela:

  3. Clique no botão “Adicionar campo de usuário” para adicionar um novo campo.

Escolhendo um tipo de campo

O tipo de campo determina o campo de entrada que os usuários verão no formulário de inscrição. Escolha com base no tipo de informação que você está coletando:

Campo de texto

  • Use para perguntas curtas com muitas respostas possíveis (ex: “Em qual empresa você trabalha?”)
  • Exibido como uma entrada de texto HTML de linha única

Área de texto

  • Use para perguntas que podem exigir respostas mais longas e de múltiplas linhas (ex: “Fale-nos sobre você”)
  • Exibido como uma entrada de área de texto HTML de múltiplas linhas

Data

  • Use para coletar valores de data (ex: “Qual é sua data de nascimento?”)
  • Exibido como um seletor de data (date picker)

Confirmação

Lista suspensa (Dropdown)

  • Use para perguntas com um número fixo de respostas possíveis (ex: “Qual é o seu gênero?”)
  • Exibido como uma entrada de seleção (select) HTML

Para adicionar opções a um campo de lista suspensa:

  1. Clique na entrada de opção
  2. Digite uma resposta e clique em “Criar”
  3. Repita para opções adicionais

As opções completas devem ser parecidas com isto:

Seleção Múltipla (Multiselect)

  • Use para perguntas onde os usuários podem escolher várias respostas de um conjunto de opções (ex: “Quais tópicos lhe interessam?”)
  • Exibido como uma entrada de seleção múltipla (multi-select)
  • Opções são configuradas da mesma forma que os campos de lista suspensa

Definindo o nome e a descrição do campo

  • Nome do Campo: Aparece antes da entrada no formulário de inscrição e no perfil do usuário
  • Descrição do Campo: Aparece após a entrada para ajudar os usuários a preencher o campo

:information_source: Tanto o nome do campo quanto a descrição são obrigatórios para salvar um campo.

Veja como os campos personalizados aparecem no formulário de inscrição:

Configurando opções de campo de usuário

Requisitos do Campo

  • Opcional - Campos opcionais podem ser deixados em branco pelos usuários
  • Para todos os usuários - Quando um campo é exigido por todos os usuários, toda conta, incluindo usuários logados, será forçada a preenchê-lo. Isso é muito útil para casos como um requisito de termos de serviço (ToS).
  • Na inscrição - Todas as novas contas serão obrigadas a preencher o campo.

Além disso, na parte inferior do formulário de criação, você encontrará estas caixas de seleção de preferência:

  • Editável após a inscrição: Permite que os usuários atualizem o campo a partir de sua página de perfil
  • Mostrar no perfil público: Exibe o valor do campo na página de resumo do usuário
  • Mostrar no cartão de usuário: Exibe o valor do campo no cartão de usuário
  • Pesquisável: Permite a busca por usuários com base no valor deste campo no diretório de usuários
  • Mostrar no formulário de inscrição: Controla se o campo aparece no formulário de inscrição. Isso é ativado automaticamente (e não pode ser desativado) quando o requisito do campo é “Para todos os usuários” ou “Na inscrição”, ou quando o campo não é editável após a inscrição.

Mostrar no perfil público

Quando ativado, o valor do campo será exibido na página de perfil do usuário:

Mostrar no cartão de usuário

Quando ativado, o valor do campo será exibido no cartão de usuário:

Pesquisável

Quando ativado, você pode pesquisar usuários com base nos valores de seus campos personalizados:

Salvando e editando campos

  1. Clique em “Salvar” para adicionar o campo à lista de campos de usuário do seu site
  2. Para editar um campo, clique no botão “Editar” ao lado dele na lista
  3. Para excluir um campo, clique no menu de reticências (⋮) ao lado dele e selecione “Excluir”

Adicionando campos personalizados ao diretório de usuários

  1. Vá para o diretório de usuários
  2. Clique no ícone de chave inglesa:

  1. Marque os campos de usuário personalizados que deseja exibir
  2. Clique em “Salvar”

Os campos de usuário personalizados selecionados agora aparecerão na tabela do diretório de usuários:

39 curtidas
Any Plugins/Easy Mods for an Extended User Profile
Add introductory text for sign-up
Setting Security Parameters: Log-In, Read-Only, Protected Groups
Theme-Component v Plugin: What's the difference
User preference on theme components
Private custom user fields...?
Users self-select Category on Registration... is it possible?
Can we implement a system for user remarks during registration for admin review?
User Field Prompt
New user reviews: admin assignment and logging of progress
User customizable theme components (how-to)
Add users to groups on signup
Announcing - Gender Pronouns Userfield on Meta
Add a custom per-user setting in a plugin
Welcome questions on the first screen for bio
How to add min or max values in custom fields?
Custom user fields not available in api
Grant Custom Badge Upon Reading ToS
Required vs. optional sign-up fields
Add users to groups through custom field automation
Terms of Service Checkbox
Hidden User Fields
Social Features
Where in Discourse can users publicly share PII?
Linking "static" information about member to topic posted
Using Discourse as a social media platform
Custom user post display
Disable account confirm emails when creating users via API
Links in additional fields
Clickable Social Icon Links on Profile
Extend Existing Controller?
Requiring acceptance of terms and conditions
"Fake" OAuth Provider?
Extend Existing Controller?
This freaking software works so well I can’t even
Allow users to block keywords
Customize Your Site Branding
Restrict the users to post in the groups who haven't uploaded their profile picture
Adding non-visible user custom fields to the API
Seeking Advice: making a discourse forum hyper local
Add custom fields to signup and login
Can add short message to verify? Just input phone number can sign up
Add terms when make new topic
Export custom field for users in discourse hosted forum
Customizing Sign-up and Log in
Grouping poll results by user custom field
Disclaimer for tutorials
How to add custom logic input on the signup page?
Terms of service changes in Discourse platform

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...]
3 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

Estou me perguntando se existe uma maneira menos complicada de reorganizar uma longa lista de campos de usuário do que clicar individualmente nas pequenas setas para movê-los para cima ou para baixo um passo de cada vez…? :face_with_peeking_eye:

Na visão geral da listagem de campos de usuário, não consigo ver como distinguir os campos que estão no formulário de inscrição e são obrigatórios (Je suis… Pays, por exemplo) daqueles que estão no formulário de inscrição, mas são opcionais (Mes attentes). Estou perdendo alguma coisa ou isso é uma falha? É bem complicado ter que editar o campo para ver se é opcional ou não. (Não tenho certeza se este é o lugar certo para isso, não sabia onde colocar.)

Talvez o json que fornece os dados possa ser um pouco útil. Não é bonito, mas você pode olhar em /admin/config/user-fields.json e obter algo como

    {
      "id": 18,
      "name": "Age",
      "description": "How old are you?",
      "field_type": "text",
      "editable": true,
      "required": false,
      "requirement": "optional",
      "show_on_profile": false,
      "show_on_user_card": false,
      "show_on_signup": false,
      "searchable": false,
      "position": 9
    },
    {
      "id": 17,
      "name": "pets",
      "description": "choose your favourite",
      "field_type": "dropdown",
      "editable": true,
      "required": false,
      "requirement": "optional",
      "show_on_profile": false,
      "show_on_user_card": false,
      "show_on_signup": false,
      "searchable": false,
      "position": 10,
      "options": [
        "cat",
        "mouse",
        "dog"
      ]
    },

Mas é claro que isso não é tão bonito quanto a informação na interface

1 curtida

ah, isso é honestamente muito mais fácil para eu trabalhar!
Isso significa que posso simplesmente editar esse arquivo e pronto? Ele existe em algum lugar assim no meu servidor e onde eu o encontro? :heart_eyes::heart_eyes::heart_eyes: