Discourse Authentication Validations

|||
-|-|-|
:discourse2: | 概要 | Discourse Authentication Validations は、カスタムバリデーションをユーザーフィールドに追加して、サインアップモーダルでのユーザーフィールドの表示を切り替える機能を提供します。
:hammer_and_wrench: | リポジトリリンク | https://github.com/discourse/discourse-authentication-validations
:open_book: | インストールガイド | Discourseにプラグインをインストールする方法

:information_source: 概要

Discourse Authentication Validations は、カスタムバリデーションをユーザーフィールドに追加する機能を提供します。

カスタムユーザーフィールドには、必須フィールドの空の値の検出以外に、コアによって提供される validation はありません。このプラグインは、ユーザーフィールドごとに正規表現を定義し、提供された入力値に対してチェックする機能を追加します。

さらに、このプラグインは、サインアップモーダルでのユーザーフィールドの表示を切り替える機能を追加します。これにより、ユーザーフィールドを「連鎖」させ、前のユーザーフィールドに特定の値がある場合にのみユーザーフィールドが表示されるようになります。

:building_construction: 基本設定

1. プラグインの有効化

Discourse Authentication Validations プラグインは、トグルまたは設定から有効にできます。どちらも admin/plugins ページからアクセスできます。

2. ユーザーフィールドにカスタムバリデーションを追加する

Discourse Authentication Validations プラグインが有効になった後、ユーザーフィールドフォームの下部に カスタムバリデーションを含める チェックボックスが表示されます。

チェックすると、さらに3つのフィールドが表示されます。

  1. 値バリデーション正規表現
  2. 表示値
  3. 対象ユーザーフィールド

:closed_lock_with_key: カスタムバリデーションの追加

値バリデーション正規表現 フィールドに有効な正規表現を含めます。

サインアップフォームのユーザーフィールドの値は、含めた正規表現に対してテストされます。入力がカスタム正規表現の基準を満たさない場合、サインアップフォームは送信されません。

値なし(デフォルトのフォームバリデーションに依存)

不正な値

正しい値

:link: ユーザーフィールドの連鎖

まず、ユーザーフィールドに 表示値 を含めます。

ユーザーフィールドに 表示値 が含まれている場合、添付された入力値が 表示値いずれか と一致するまで、その値の入力を監視します。その後、含まれる 対象ユーザーフィールド の表示を切り替え、表示可能にします。

次に、対象ユーザーフィールド の値を追加します。

対象ユーザーフィールド ドロップダウンには、利用可能なすべてのユーザーフィールドのリストが表示されます。選択したユーザーフィールドは、表示値 の対応する値によって表示が切り替わります。

:hammer_and_wrench: 高度な連鎖

複数のユーザーフィールドにカスタムバリデーションを追加することで、ユーザーフィールドを連鎖させることができます。

たとえば、次の値を持つ3つのユーザーフィールドがあるとします。

名前 カスタムバリデーションあり 表示値 対象ユーザーフィールド
入力1 true show-field-two 入力2
入力2 true show-field-three 入力3
入力3 false

入力2と入力3は、入力1の「子」であるため、デフォルトで非表示になります。入力1に show-field-two表示値 が追加されると、入力2が表示されますが、入力3は引き続き非表示のままです。入力2の値が show-field-three になるまで非表示のままです。

表示値対象クラス の適切な組み合わせにより、ユーザーフィールドを無限にネストさせることができます。

「いいね!」 18

こんにちは、@isaacさん

このプラグインは素晴らしいですね。まさに私が求めていたものです!まだメンテナンスされていますか?「チェイニング」機能で問題が発生しています。

上記のエラーは、以下を使用して再現しました。

しかし、デフォルトですべてのフィールドが表示されてしまいます…説明文を見落としていたら申し訳ありません!

「いいね!」 1

申し訳ありません。プラグインは動作しています。ただし、招待リンク経由で表示している場合は動作しません。公開サインアップページを使用している場合は動作します。

招待と公開の両方のサインアップでロジックが機能するようになると、素晴らしい機能になるでしょう!

プラグイン、素晴らしい出来です!

「いいね!」 5

まったく同感です。@tobiaseigen、このプラグインをより広範な機能として採用する場合、@kravitsjacob が指摘したように、両方の場所(公開/招待)でロジックが機能するようにしたいと考えています。

「いいね!」 2

こんにちは、@isaac さん。この素晴らしいプラグイン、本当にありがとうございます。私にとって多くのディスコースの機会が開かれました。

ちょっとしたバグに遭遇しました。質問が非表示になっている場合でも、質問への回答が保存されていることに気づきました。これにより、意図しない状況がいくつか発生しています。ユーザーが実際には送信できないはずの回答を送信しています(だからこそ、そもそも質問を非表示にしたかったのです)。この動作は、質問が二重にネストされている場合に、親の回答が選択解除されていても、トリガーとなる回答が選択されていると思っているため、質問が表示され続けるという別の状況も引き起こします。この説明は非常に曖昧だと思いますので、この動作をハイライトしたGIFを以下に示します。

auth null bug

私の希望する修正は、回答が見えなくなったときに回答をnull値にリセットすることだと思います。これは、フォームを設定する人が設定できる「オプトイン」動作にすることもできます。これらのツリーをたどるときに回答が永続するかどうかについては、さまざまな考え方があると思います。

これを実装していただけますか? :pray:

「いいね!」 5

詳細なご回答ありがとうございます。来週確認させていただきます :slight_smile:

「いいね!」 3

本日、これらの問題を確認する機会がありました :slight_smile:

詳細については、PRの説明をお読みください!

「いいね!」 3

必須フィールドをオプションにすることは現在できません。

「業種」フィールドがあり、「その他」が選択されるたびに、「その他の業種」フィールドが表示されます。

しかし、「その他の業種」フィールドを必須にすると、そのフィールドが非表示になっている場合にフォームを送信できなくなります。

divを手動で表示すると、フォームが非表示になっているにもかかわらず、この入力が必須であることがわかります。

「その他」を選択し、値を入力してから、別の業種を選択して入力が非表示になった場合、フォームを送信できます。そして、@kravitsjacob が指摘したのと同じ状況が発生します。「業種」が「その他」に設定されていなくても、「その他の業種」フィールドの値がユーザープロファイルに保存されます。

ユーザー管理:

「いいね!」 3

RGJさん、必須フィールドの問題は解決できましたか?私も同じ問題に直面しています。
isaacさん、これに対する回避策はありますか?表示条件が設定されているフィールドを必須にしたいのですが。

いいえ、これについてはまだ返答がなく、私も時間をかけていません。

@RGJ 様、迅速なご返信ありがとうございます。
元のリポジトリに、この問題を解決するはずの修正を含むPRを作成しました。
ここでの主な課題は、バリデーションがフロントエンドとバックエンドの2か所で実行されるという事実であり、それぞれに個別にソリューションを実装し、期待どおりに動作することを確認する必要がありました。
これが将来誰かの助けになれば幸いです。