Discourse Authentication Validations

:discourse2: Summary Discourse Authentication Validations enables the ability to add custom validations to a User Field to toggle the display of User Fields on the Signup Modal.
:hammer_and_wrench: Repository Link https://github.com/discourse/discourse-authentication-validations
:open_book: Install Guide How to install plugins in Discourse

:information_source: About

Discourse Authentication Validations adds the ability to add custom validations to a User Field.

Custom User Fields do not have any type of validation provided by core, outside of detecting an empty value on a required field. This plugin adds the ability to define a regex, per user field, that will then be checked against the provided input value.

Additionally, this plugin adds the ability to toggle the display of User Fields on the Signup Modal. This allows you to “chain” User Fields together, so that a User Field is only displayed if a previous User Field has a specific value.

:building_construction: Basic Setup

1. Enable Plugin

The Discourse Authentication Validations plugin can be enabled either by the toggle or from its settings, both accessible from your admin/plugins page.

2. Add a custom validation to a User Field

After the Discourse Authentication Validations plugin has been enabled you will see a Include a Custom Validations checkbox at the bottom of your User Field form.

When checked it will display an additional three fields:

  1. Value Validation Regex
  2. Show Values
  3. Target User Fields

:closed_lock_with_key: Adding a Custom Validation

Include a valid regex in the Value Validation Regex field:

The user field’s value on the signup form will now be tested against the regex you have included. In the case that the input does not meet the standards of your custom Regex, the signup form will not submit.

No value (relies on default form validation)

Incorrect value

Correct value

:link: Chaining User Fields

Firstly, include a Show Values value on a User Field.

When a User Field has a Show Values value included it will watch the value of the attached input until the input value matches ANY of the show values. It will then toggle the visibility of any included Target User Fields, making them visible.

Secondly, add a Target User Fields value.

In the Target User Fields dropdown you will see a list of all available User Fields. Any User Field you select will have their visibility toggled by corresponding values in Show Values.

:hammer_and_wrench: Advanced Chaining

You can chain User Fields together by adding custom validations to multiple User Fields.

For example, let’s say we have three User Fields with the given values:

Name Has Custom Validation Show Values Target User Fields
Input One true show-field-two Input Two
Input Two true show-field-three Input Three
Input Three false

Input Two and Three will be hidden by default as they are “children” of Input One. When the show value of show-field-two is added to Input One, Input Two will be displayed, but Input Three will still remain hidden. It will remain hidden until Input Two has the value of show-field-three.

With the correct combination of Show Values and Target Classes you can infinitely nest User Fields beneath each other.

15 Likes

Hello @isaac.

I love this plugin, it’s exactly what I need! Is this still being maintained? I am having trouble with the “chaining” functionality.

I followed the example above using:

But it is showing all the fields by default… I apologize if I missed something in the writeup!

1 Like

My apologies for this - the plugin is working. However, it does not work if you are viewing through an “invite” sign up link. It does work if you are using a public signup page.

Could be a nice feature to have the logic work for both invite and public sign up!

Great job with the plugin!

5 Likes

I very much agree. @tobiaseigen if we were to adopt this plugin as a feature more broadly, we would want to have the logic work in both places (public/invite) as @kravitsjacob has pointed out.

2 Likes

Hello @isaac. Thank you once again for this amazing plugin - it really has opened up so many discourse opportunities for me.

I ran into a little bug - I noticed that question responses are saved, even if a question is hidden. This has led to a few unintended situations where users are submitting response that shouldn’t really be possible (hence why we wanted to hide the questions in the first place). This behavior also causes another situation where when a question is double nested, it still appears even though the parent response has been deselected (because it still thinks the triggering answer is selected). I know this description is a big vague, so here is a gif highlighting this behavior:

auth null bug

I think my desired fix would be to reset the responses to the null value once they are no longer visible. This could also be “opt-in” behavior that is configurable by the person setting up the form - I could see different philosophies existing on whether responses should persist when going down these trees.

Would you be able to implement this? :pray:

5 Likes

Thank you for the detailed response! I will take a look at this next week :slight_smile:

3 Likes

I had the opportunity to look at these issues today :slight_smile:

Please read the PR description for details!

3 Likes