Criar e configurar campos de usuário personalizados

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

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

Os campos personalizados de usuário permitem que você colete informações adicionais de seus usuários, além dos campos padrão do perfil. Esses campos podem ser exibidos nos cartões de usuário, nas páginas de resumo do 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 personalizados de usuário.

Adicionando um campo de usuário

  1. Vá para Admin > Community > User Fields (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 “Add user field” para adicionar um novo campo.

Escolhendo o 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.: “Para 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, em várias linhas (ex.: “Fale um pouco sobre você”)
  • Exibido como uma entrada de área de texto HTML de várias linhas

Data

  • Use para coletar valores de data (ex.: “Qual é a sua data de nascimento?”)
  • Exibido como uma entrada de seletor de data

Confirmação

  • Use para perguntas de sim/não (ex.: “Você gostaria de se inscrever na nossa newsletter?”)
  • Exibido como uma caixa de seleção HTML
  • Adicione links importantes para os usuários confirmarem usando HTML, por exemplo:
    I agree to read and follow <a href="https://meta.discourse.org/guidelines">the Community guidelines.</a>

Menu suspenso (Dropdown)

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

Para adicionar opções para um campo de menu suspenso:

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

As opções concluídas devem se parecer com isto:

Seleção múltipla

  • Use para perguntas em que 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
  • As opções são configuradas da mesma forma que os campos de menu suspenso

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 depois da entrada para ajudar os usuários a preencher o campo

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

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

Configurando as opções do 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 é obrigatório para todos os usuários, todas as contas, incluindo usuários conectados, serão forçadas 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 da página do perfil
  • Exibir no perfil público: Exibe o valor do campo na página de resumo do usuário
  • Exibir no cartão de usuário: Mostra o valor do campo no cartão do usuário
  • Buscável: Permite a busca de usuários com base no valor deste campo no diretório de usuários
  • Exibir 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.

Exibir no perfil público

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

Exibir no cartão de usuário

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

Buscável

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

Salvando e editando campos

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

Adicionando campos personalizados ao diretório de usuários

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

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

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

40 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
Users self-select Category on Registration... is it possible?
Private custom user fields...?
Can we implement a system for user remarks during registration for admin review?
User customizable theme components (how-to)
This freaking software works so well I can’t even
User Field Prompt
New user reviews: admin assignment and logging of progress
Add users to groups on signup
How to add min or max values in custom fields?
Add a custom per-user setting in a plugin
Welcome questions on the first screen for bio
Announcing - Gender Pronouns Userfield on Meta
Grant Custom Badge Upon Reading ToS
If topic info is too long, tags are cut off and create a blank line
Required vs. optional sign-up fields
Terms of Service Checkbox
Hidden User Fields
New user filter by custom field and contact
Social Features
Where in Discourse can users publicly share PII?
Linking "static" information about member to topic posted
Add custom fields to signup and login
Using Discourse as a social media platform
Add users to groups through custom field automation
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?
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
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
Custom user fields not available in api

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 buscando validação de valor ou funcionalidades semelhantes.

Sugiro criar ou buscar um tópico em Contribute > Feature com sua ideia. :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: