Creación y configuración de campos de usuario personalizados

:bookmark: Esta guía explica cómo crear y configurar campos de usuario personalizados en Discourse, incluyendo cómo añadirlos al formulario de registro, perfiles de usuario y directorio de usuarios.

:person_raising_hand: Nivel de usuario requerido: Administrador

Los campos de usuario personalizados le permiten recopilar información adicional de sus usuarios más allá de los campos de perfil estándar. Estos campos se pueden mostrar en las tarjetas de usuario, páginas de resumen de usuario e incluso recuperarse utilizando el plugin Data Explorer. Esta guía le guiará a través del proceso de creación y configuración de campos de usuario personalizados.

Añadir un campo de usuario

  1. Vaya a Admin > Comunidad > Campos de usuario (discourse.example.com/admin/config/user-fields).

  2. Si aún no ha creado ningún campo de usuario, verá esta pantalla:

  3. Haga clic en el botón “Añadir campo de usuario” para agregar un nuevo campo.

Elegir un tipo de campo

El tipo de campo determina el campo de entrada que verán los usuarios en el formulario de registro. Elija según el tipo de información que esté recopilando:

Campo de texto

  • Úselo para preguntas cortas con muchas respuestas posibles (ej. “¿Para qué empresa trabaja?”)
  • Se muestra como una entrada de texto HTML de una sola línea

Área de texto (Textarea)

  • Úselo para preguntas que puedan requerir respuestas más largas y de varias líneas (ej. “Cuéntanos sobre ti”)
  • Se muestra como una entrada HTML de área de texto de varias líneas

Fecha

  • Úselo para recopilar valores de fecha (ej. “¿Cuál es su fecha de nacimiento?”)
  • Se muestra como una entrada de selector de fecha

Confirmación

Desplegable (Dropdown)

  • Úselo para preguntas con un número fijo de respuestas posibles (ej. “¿Cuál es su género?”)
  • Se muestra como una entrada de selección HTML

Para añadir opciones a un campo desplegable:

  1. Haga clic en la entrada de opción
  2. Escriba una respuesta y haga clic en “Crear”
  3. Repita para opciones adicionales

Las opciones completadas deberían verse similares a esto:

Multiselección (Multiselect)

  • Úselo para preguntas donde los usuarios pueden elegir varias respuestas de un conjunto de opciones (ej. “¿Qué temas le interesan?”)
  • Se muestra como una entrada de selección múltiple
  • Las opciones se configuran de la misma manera que los campos desplegables

Establecer el nombre y la descripción del campo

  • Nombre del campo: Aparece antes de la entrada en el formulario de registro y perfil de usuario
  • Descripción del campo: Aparece después de la entrada para ayudar a los usuarios a completar el campo

:information_source: Tanto el nombre del campo como la descripción son obligatorios para guardar un campo.

Así es como aparecen los campos personalizados en el formulario de registro:

Configurar las opciones del campo de usuario

Requisitos del campo

  • Opcional: Los campos opcionales pueden dejarse vacíos por los usuarios
  • Para todos los usuarios: Cuando un campo es obligatorio para todos los usuarios, cada cuenta, incluidas las cuentas ya iniciadas, se verá obligada a completarlo. Esto es muy útil para casos como el requisito de términos de servicio (ToS).
  • En el registro: Todas las cuentas nuevas deberán completar el campo.

Además, en la parte inferior del formulario de creación, encontrará estas casillas de preferencia:

  • Editable después del registro: Permite a los usuarios actualizar el campo desde su página de perfil
  • Mostrar en el perfil público: Muestra el valor del campo en la página de resumen del usuario
  • Mostrar en la tarjeta de usuario: Muestra el valor del campo en la tarjeta de usuario
  • Buscable: Permite buscar usuarios basándose en el valor de este campo en el directorio de usuarios
  • Mostrar en el formulario de registro: Controla si el campo aparece en el formulario de registro. Esto se habilita automáticamente (y no se puede deshabilitar) cuando el requisito del campo es “Para todos los usuarios” o “En el registro”, o cuando el campo no es editable después del registro.

Mostrar en el perfil público

Cuando está habilitado, el valor del campo se mostrará en la página de perfil del usuario:

Mostrar en la tarjeta de usuario

Cuando está habilitado, el valor del campo se mostrará en la tarjeta de usuario:

Buscable

Cuando está habilitado, puede buscar usuarios basándose en sus valores de campo personalizados:

Guardar y editar campos

  1. Haga clic en “Guardar” para añadir el campo a la lista de campos de usuario de su sitio
  2. Para editar un campo, haga clic en el botón “Editar” junto a él en la lista
  3. Para eliminar un campo, haga clic en el menú de elipsis (⋮) junto a él y seleccione “Eliminar”

Añadir campos personalizados al directorio de usuarios

  1. Vaya al directorio de usuarios
  2. Haga clic en el icono de la llave inglesa:

  1. Marque los campos de usuario personalizados que desea mostrar
  2. Haga clic en “Guardar”

Los campos de usuario personalizados seleccionados aparecerán ahora en la tabla del directorio de usuarios:

39 Me gusta
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

Creo que faltan dos imágenes en los siguientes encabezados:

No estoy seguro si está relacionado con Imágenes faltantes en Meta.discourse.org – también publicaré allí.

¿Puedo ver esas imágenes? (también en una ventana anónima)

1 me gusta

No puedo ver esos

Pero el segundo funciona en mi cita.

Editar

1 me gusta

Curiosamente, puedo ver la segunda imagen en la cita, pero no en la publicación original ^^

1 me gusta

Hmm. Eso es interesante. Creo que hay una solución en camino para el problema de Missing images at Meta.discourse.org, así que espero que se resuelva con eso. :crossed_fingers:

2 Me gusta

¿Hay alguna configuración que deba modificar para especificar la longitud máxima de un campo de usuario personalizado? En este momento, en este campo “Test” que creé como campo de usuario de prueba, no puedo introducir ni un solo carácter en mi perfil de usuario (ni siquiera “Test”, como se muestra).

Me encantaría un tipo de campo: ¿es posible enlace / URL?

Dado que las URL son texto, el campo de texto funciona técnicamente, @Vaping_Community. Sin embargo, es posible que esté solicitando detalles adicionales como validación de valor o similar.

Podría buscar o crear un tema de Feature con lo que tiene en mente. :slight_smile:

3 Me gusta

¿Hay planes para permitir multilínea/compositor para campos de usuario personalizados? :folded_hands:

¡Tenga en cuenta que si desea incrustar un enlace en uno de los campos de usuario personalizados, debe usar la sintaxis HTML!
<a> href="url">texto del enlace</a>

Por ejemplo, para reconocer las directrices/políticas de la comunidad:

1 me gusta

¿Puedo vincular un reclamo personalizado de mi Auth0 SSO a un campo personalizado? Actualmente, el usuario ingresa la información del campo en Auth0 y luego tiene que ingresarla una segunda vez al registrarse. Me gustaría que el valor se mapeara si es posible.

Es posible, sí:

Dentro de tu endpoint SSO, tienes la capacidad de mapear el claim al payload, p. ej.:

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 Me gusta

Gracias @dax

¿Hay alguna forma de verificar el nombre del campo en la base de datos? Por ejemplo, tenemos un campo de nombre, probé custom.firstname, custom.first_name y custom.firstName, ninguno de los cuales resultó en que los campos se poblaran en la pantalla de registro.

He revisado los registros de errores para confirmar que los campos del token están llegando como se muestra arriba.

Profundizando en el código, ¿es esto solo para Discourse Connect SSO? Estamos usando el plugin Auth0.

La sintaxis debe ser custom.user_field_x, donde x es el ID numérico del campo que se muestra en /admin/config/user-fields/{x}/edit.

Esa función de mapeo no está disponible directamente en el plugin Auth0.

Dicho esto, todavía hay opciones para lograr lo que describes:

  • crear un componente temático. Puedes agregar un pequeño script de front-end que sincronice automáticamente un campo de usuario personalizado de Discourse con un valor ya almacenado en Auth0. Por ejemplo, cuando un usuario inicia sesión y el campo está vacío, el script puede llamar a un endpoint seguro (una pequeña función en la nube) que obtenga el valor del campo de Auth0 y actualice el perfil de Discourse a través de la API.
  • usar herramientas de automatización. También podrías usar servicios de automatización externos como Zapier o Make para realizar esa sincronización fuera de Discourse. La ventaja es que no tienes que escribir/mantener código, solo pagar por el servicio de terceros.
  • desarrollo personalizado. Podemos extender el propio plugin Auth0 para que admita de forma nativa el mapeo de reclamaciones personalizadas a campos de usuario al iniciar sesión, o crear un plugin personalizado que funcione junto con el plugin Auth0.

Un inconveniente claro del enfoque del componente temático es que tendrías que escribir y mantener código personalizado tú mismo, al mismo tiempo que tienes cuidado desde el punto de vista de la seguridad para evitar introducir posibles errores o vulnerabilidades. Honestamente, no es una solución que recomendaría para un sitio de producción como el tuyo.

Si estuviera en tu posición, me inclinaría más por la segunda opción, utilizando herramientas de terceros, o consideraría enviar una solicitud de función o una solicitud de trabajo personalizado (dependiendo de la evaluación de nuestros gerentes de proyecto) para mejorar el propio plugin Auth0.

Si estás interesado en explorar la última opción, podemos continuar la discusión en privado.

1 me gusta

Me pregunto si hay una forma menos engorrosa de reorganizar una larga lista de campos de usuario que hacer clic individualmente en las pequeñas flechas para moverlos un paso hacia arriba o hacia abajo…? :face_with_peeking_eye:

En la descripción general de la lista de campos de usuario, no veo cómo distinguir los campos que están en el registro y son obligatorios (Je suis… Pays, por ejemplo) de aquellos que están en el formulario de registro pero son opcionales (Mes attentes). ¿Me estoy perdiendo algo o es una omisión? Es bastante engorroso tener que editar el campo para ver si es opcional o no. (No estoy seguro de si este es el lugar correcto para esto, no estaba seguro de dónde ponerlo).

Quizás el json que proporciona los datos pueda ser de alguna ayuda. No es muy bonito, pero puedes mirar en /admin/config/user-fields.json y obtener 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"
      ]
    },

Pero por supuesto, eso no es tan bonito como la información en la interfaz.

1 me gusta

¡Oh, eso es honestamente mucho más fácil para mí trabajar!
¿Eso significa que solo puedo editar ese archivo y terminar con eso? ¿Existe en algún lugar así en mi servidor y dónde lo encuentro? :heart_eyes::heart_eyes::heart_eyes: