Validaciones de autenticación de Discourse

|||
-|-|-|
:discourse2: | Resumen | Discourse Authentication Validations permite añadir validaciones personalizadas a un Campo de Usuario para alternar la visualización de Campos de Usuario en el Modal de Registro.
:hammer_and_wrench: | Enlace al Repositorio | https://github.com/discourse/discourse-authentication-validations
:open_book: | Guía de Instalación | Cómo instalar plugins en Discourse

:information_source: Acerca de

Discourse Authentication Validations añade la capacidad de añadir validaciones personalizadas a un Campo de Usuario.

Los Campos de Usuario Personalizados no tienen ningún tipo de validación proporcionada por el núcleo, aparte de detectar un valor vacío en un campo obligatorio. Este plugin añade la capacidad de definir una expresión regular (regex), por campo de usuario, que se comprobará contra el valor de entrada proporcionado.

Además, este plugin añade la capacidad de alternar la visualización de los Campos de Usuario en el Modal de Registro. Esto te permite «encadenar» Campos de Usuario, de modo que un Campo de Usuario solo se muestre si un Campo de Usuario anterior tiene un valor específico.

:building_construction: Configuración Básica

1. Habilitar Plugin

El plugin Discourse Authentication Validations se puede habilitar mediante el interruptor o desde sus ajustes, ambos accesibles desde tu página admin/plugins.

2. Añadir una validación personalizada a un Campo de Usuario

Después de habilitar el plugin Discourse Authentication Validations, verás una casilla de verificación Incluir validaciones personalizadas en la parte inferior de tu formulario de Campo de Usuario.

Cuando se marca, mostrará tres campos adicionales:

  1. Expresión regular de validación de valor
  2. Mostrar valores
  3. Campos de usuario de destino

:closed_lock_with_key: Añadir una Validación Personalizada

Incluye una expresión regular válida en el campo Expresión regular de validación de valor:

El valor del campo de usuario en el formulario de registro se probará ahora contra la expresión regular que hayas incluido. En caso de que la entrada no cumpla los estándares de tu Regex personalizada, el formulario de registro no se enviará.

Sin valor (depende de la validación de formulario predeterminada)

Valor incorrecto

Valor correcto

:link: Encadenamiento de Campos de Usuario

En primer lugar, incluye un valor de Mostrar valores en un Campo de Usuario.

Cuando un Campo de Usuario tiene un valor de Mostrar valores incluido, observará el valor de la entrada adjunta hasta que el valor de la entrada coincida con CUALQUIERA de los mostrar valores. Luego alternará la visibilidad de cualquier Campos de usuario de destino incluido, haciéndolos visibles.

En segundo lugar, añade un valor de Campos de usuario de destino.

En el menú desplegable Campos de usuario de destino, verás una lista de todos los Campos de usuario disponibles. Cualquier Campo de usuario que selecciones tendrá su visibilidad alternada por los valores correspondientes en Mostrar valores.

:hammer_and_wrench: Encadenamiento Avanzado

Puedes encadenar Campos de Usuario añadiendo validaciones personalizadas a múltiples Campos de Usuario.

Por ejemplo, digamos que tenemos tres Campos de Usuario con los valores dados:

Nombre ¿Tiene Validación Personalizada? Mostrar Valores Campos de Usuario de Destino
Entrada Uno true mostrar-campo-dos Entrada Dos
Entrada Dos true mostrar-campo-tres Entrada Tres
Entrada Tres false

La Entrada Dos y Tres estarán ocultas por defecto ya que son «hijas» de la Entrada Uno. Cuando el valor a mostrar de mostrar-campo-dos se añade a la Entrada Uno, la Entrada Dos se mostrará, pero la Entrada Tres seguirá oculta. Permanecerá oculta hasta que la Entrada Dos tenga el valor de mostrar-campo-tres.

Con la combinación correcta de Mostrar Valores y Clases de Destino puedes anidar infinitamente Campos de Usuario uno debajo de otro.

18 Me gusta

Hola @isaac.

¡Me encanta este plugin, es exactamente lo que necesito! ¿Todavía se está manteniendo? Tengo problemas con la funcionalidad de “encadenamiento”.

Seguí el ejemplo anterior usando:

Pero muestra todos los campos por defecto… ¡Me disculpo si me perdí algo en la explicación!

1 me gusta

Mis disculpas por esto: el plugin está funcionando. Sin embargo, no funciona si estás viendo a través de un enlace de registro de “invitación”. Sí funciona si estás utilizando una página de registro pública.

¡Podría ser una buena característica que la lógica funcione tanto para el registro por invitación como para el público!

¡Gran trabajo con el plugin!

5 Me gusta

Estoy muy de acuerdo. @tobiaseigen si adoptáramos este plugin como una característica más amplia, querríamos que la lógica funcionara en ambos lugares (público/invitación) como ha señalado @kravitsjacob.

2 Me gusta

Hola @isaac. Gracias una vez más por este increíble plugin, realmente me ha abierto muchas oportunidades de discusión.

Me encontré con un pequeño error: noté que las respuestas a las preguntas se guardan, incluso si una pregunta está oculta. Esto ha llevado a algunas situaciones no deseadas en las que los usuarios envían respuestas que en realidad no deberían ser posibles (por eso queríamos ocultar las preguntas en primer lugar). Este comportamiento también causa otra situación en la que, cuando una pregunta está doblemente anidada, todavía aparece aunque la respuesta principal se haya deseleccionado (porque todavía piensa que la respuesta desencadenante está seleccionada). Sé que esta descripción es un poco vaga, así que aquí hay un gif que resalta este comportamiento:

auth null bug

Creo que la corrección que deseo sería restablecer las respuestas al valor nulo una vez que ya no sean visibles. Este también podría ser un comportamiento “opt-in” que sea configurable por la persona que configura el formulario; puedo ver que existen diferentes filosofías sobre si las respuestas deben persistir al bajar por estos árboles.

¿Podrías implementar esto? :pray:

5 Me gusta

¡Gracias por la detallada respuesta! Le echaré un vistazo la próxima semana :slight_smile:

3 Me gusta

Hoy tuve la oportunidad de revisar estos problemas :slight_smile:

¡Por favor, lee la descripción del PR para más detalles!

3 Me gusta

Actualmente es imposible tener un campo opcional requerido.

Tengo un campo “Industria” y cada vez que se selecciona “Otro”, se muestra el campo “Otra Industria”.

Pero cuando hago que el campo “Otra Industria” sea obligatorio, no puedo enviar el formulario cuando ese campo está oculto.

Cuando oculto manualmente el div, puedes ver que está requiriendo esta entrada, aunque el formulario esté oculto.

Cuando selecciono “Otro”, relleno un valor y luego selecciono otra industria para que la entrada se oculte de nuevo, puedo enviar el formulario. Y entonces también ocurre la misma situación que señaló @kravitsjacob: el valor del campo “Otra Industria” se guarda en el perfil del usuario, aunque “Industria” no esté configurado como “Otro”.

Administrador de usuario:

3 Me gusta

Hola @RGJ, ¿lograste resolver el problema con los campos obligatorios? Tengo el mismo problema.
@isaac, ¿hay alguna solución alternativa para esto? Tengo campos que deberían ser obligatorios mientras se establece la condición para hacerlos visibles.

No, no he tenido noticias al respecto ni yo mismo he dedicado tiempo.