このガイドでは、Discourse でカスタムユーザーフィールドを作成および設定する方法を説明します。これには、サインアップフォーム、ユーザープロフィール、ユーザーディレクトリへの追加方法が含まれます。
必要なユーザーレベル: 管理者
カスタムユーザーフィールドを使用すると、標準のプロフィールフィールド以外に、ユーザーから追加情報を収集できます。これらのフィールドは、ユーザーカード、ユーザーサマリーページに表示でき、データエクスプローラープラグインを使用して取得することもできます。このガイドでは、カスタムユーザーフィールドの作成と設定の手順を説明します。
ユーザーフィールドの追加
-
管理 > コミュニティ > ユーザーフィールド (discourse.example.com/admin/config/user-fields) に移動します。
-
まだユーザーフィールドを作成していない場合、この画面が表示されます。
-
「ユーザーフィールドを追加」ボタンをクリックして、新しいフィールドを追加します。
フィールドタイプの選択
フィールドタイプは、サインアップフォームでユーザーが表示する入力フィールドを決定します。収集する情報の種類に基づいて選択してください。
テキストフィールド
- 多くの回答の可能性がある短い質問に使用します(例:「どの会社にお勤めですか?」)
- シングルラインのHTMLテキスト入力として表示されます
テキストエリア
- より長く、複数行の回答が必要になる可能性のある質問に使用します(例:「自己紹介をしてください」)
- 複数行のHTML textarea入力として表示されます
日付
- 日付値の収集に使用します(例:「生年月日は?」)
- 日付ピッカー入力として表示されます
確認
- はい/いいえの質問に使用します(例:「ニュースレターに登録しますか?」)
- HTMLチェックボックスとして表示されます
ドロップダウン
- 一定数の可能な回答がある質問に使用します(例:「性別は?」)
- HTML select入力として表示されます
ドロップダウンフィールドのオプションを追加するには:
- オプション入力欄をクリックします
- 回答を入力し、「作成」をクリックします
- 追加のオプションについては繰り返します
完成したオプションは次のように表示されます。
マルチセレクト
- オプションのセットから複数の回答を選択できる質問に使用します(例:「どのトピックに興味がありますか?」)
- マルチセレクト入力として表示されます
- オプションの設定方法は、ドロップダウンフィールドと同じです
フィールド名と説明の設定
- フィールド名: サインアップフォームとユーザープロフィールの入力の前に表示されます
- フィールド説明: 入力の後ろに表示され、ユーザーがフィールドを完了するのに役立ちます
フィールドを保存するには、フィールド名と説明の両方が必須です。
カスタムフィールドがサインアップフォームにどのように表示されるかを以下に示します。
ユーザーフィールドオプションの設定
フィールドの要件
- 任意: 任意のフィールドはユーザーが空のままにすることができます
- すべてのユーザーに必須: フィールドがすべてのユーザーに必須の場合、ログインしているユーザーを含むすべてのアカウントが、フィールドへの入力を強制されます。これは、利用規約(ToS)の要件などの場合に非常に役立ちます。
- サインアップ時: すべての新規アカウントがフィールドへの入力を強制されます。
さらに、作成フォームの下部には、次の設定チェックボックスがあります。
- サインアップ後に編集可能: ユーザーがプロフィールページからフィールドを更新できるようにします
- 公開プロフィールに表示: フィールドの値をユーザーのサマリーページに表示します
- ユーザーカードに表示: フィールドの値をユーザーカードに表示します
- 検索可能: ユーザーディレクトリでこのフィールドの値に基づいてユーザーを検索できるようにします
- サインアップフォームに表示: フィールドがサインアップフォームに表示されるかどうかを制御します。フィールドの要件が「すべてのユーザーに必須」または「サインアップ時」である場合、またはフィールドがサインアップ後に編集できない場合は、これは自動的に有効になります(無効にすることはできません)。
公開プロフィールに表示
有効にすると、フィールドの値がユーザーのプロフィールページに表示されます。
ユーザーカードに表示
有効にすると、フィールドの値がユーザーカードに表示されます。
検索可能
有効にすると、カスタムフィールドの値に基づいてユーザーを検索できます。
フィールドの保存と編集
- 「保存」をクリックして、サイトのユーザーフィールドリストにフィールドを追加します
- フィールドを編集するには、リスト内でその横にある「編集」ボタンをクリックします
- フィールドを削除するには、その横にある省略記号メニュー (⋮) をクリックし、「削除」を選択します
ユーザーディレクトリにカスタムフィールドを追加する
- ユーザーディレクトリに移動します
- レンチアイコンをクリックします。
- 表示したいカスタムユーザーフィールドにチェックを入れます
- 「保存」をクリックします
選択したカスタムフィールドがユーザーディレクトリのテーブルに表示されます。
「いいね!」 39
これらの見出しの下に画像が2つ不足していると思います。
Meta.discourse.orgの画像欠落についてに関連しているか分かりませんが、そちらにも投稿します。
引用では2枚目の画像が見えますが、元の投稿では見えません^^
「いいね!」 1
なるほど。それは興味深いですね。Missing images at Meta.discourse.org の問題に対する修正が来ると思うので、それで解決されるといいですね。
「いいね!」 2
カスタムユーザーフィールドの最大長を指定するために変更する必要がある設定はありますか?現在、テスト用のユーザーフィールドとして作成したこの「テスト」フィールドでは、ユーザープロファイルに1文字も入力できません(表示されているように「テスト」さえも)。
maiki
(maiki)
68
URLはテキストなので、textフィールドは技術的には機能します。@Vaping_Community。ただし、値の検証などの追加の詳細を求めているのかもしれません。
お考えの機能について、Feature トピックを検索または作成することもできます。
「いいね!」 3
カスタムユーザーフィールドで複数行/コンポーザーを使用する予定はありますか?
langstonb
(Brittany Langston)
71
カスタムユーザーフィールドにリンクを埋め込みたい場合は、HTML構文を使用する必要があります!
<a href="url">リンクテキスト</a>
たとえば、コミュニティガイドライン/ポリシーを承認するには:
「いいね!」 1
rey.riel
(Rey)
75
Auth0 SSO のカスタムクレームをカスタムフィールドに連携することはできますか?現在、ユーザーは Auth0 でフィールド情報を入力してから、サインアップ時に再度入力する必要があります。可能であれば、値をマッピングしたいと思います。
dax
(Daniela)
76
はい、可能です。
SSOエンドポイント内で、クレームをペイロードにマッピングする機能があります。例:
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
rey.riel
(Rey)
77
@daxさん、ありがとうございます。
DBでフィールド名を確認する方法はありますか?例えば、名(first name)フィールドがありますが、custom.firstname、custom.first_name、custom.firstNameを試しましたが、サインアップ画面でフィールドが入力されませんでした。
エラーログを確認し、トークンフィールドが上記のように表示されていることを確認しました。
rey.riel
(Rey)
78
さらにコードを詳しく見ていますが、これはDiscourse Connect SSO専用ですか?Auth0プラグインを使用しています。
dax
(Daniela)
79
構文は custom.user_field_x である必要があります。ここで x は /admin/config/user-fields/{x}/edit に表示される数値フィールド ID です。
そのマッピング機能はAuth0プラグインでは直接利用できません。
とはいえ、説明されていることを実現するためのオプションはまだあります。
- テーマコンポーネントの作成。DiscourseのカスタムユーザーフィールドをAuth0に既に保存されている値と自動的に同期する小さなフロントエンドスクリプトを追加できます。たとえば、ユーザーがログインしたときにフィールドが空の場合、スクリプトはセキュアなエンドポイント(小さなクラウド関数)を呼び出して、Auth0からフィールド値を取得し、API経由でDiscourseプロファイルを更新できます。
- 自動化ツールの使用。ZapierやMakeなどの外部自動化サービスを使用して、Discourse外で同期を実行することもできます。利点は、コードの作成/保守を行う必要がなく、サードパーティサービスの料金を支払うだけで済むことです。
- カスタム開発。Auth0プラグイン自体を拡張して、ログイン時にカスタムクレームをユーザーフィールドにネイティブにマッピングできるようにしたり、Auth0プラグインと連携するカスタムプラグインを構築したりできます。
テーマコンポーネントアプローチの明確な欠点は、カスタムコードを自分で作成および保守する必要があり、潜在的なバグや脆弱性を回避するためにセキュリティの観点からも注意が必要なことです。正直なところ、あなたの本番サイトのようなサイトにはお勧めできないソリューションです。
もし私があなたの立場なら、2番目のオプション(サードパーティツールの使用)に傾くか、Auth0プラグイン自体の強化のために機能リクエストまたはカスタムワークリクエスト(プロジェクトマネージャーの評価による)を提出することを検討します。
最後のオプションを検討することに興味がある場合は、プライベートで議論を続けることができます。
「いいね!」 1
stephtara
(Stephanie Booth)
80
長いユーザーフィールドのリストを、一つずつ上下に移動させるための小さな矢印をシングルクリックするよりも、もっと簡単な再編成方法があるか知りたいです…
stephtara
(Stephanie Booth)
81
ユーザーフィールド一覧の概要で、サインアップ時にあり、かつ必須のフィールド(例:「Je suis… Pays」)と、サインアップフォームにあり、オプションのフィールド(「Mes attentes」)を区別する方法が見当たりません。私が見落としているのでしょうか、それとも見落としでしょうか?フィールドを編集してオプションかどうかを確認しなければならないのは、かなり面倒です。(ここが適切な場所かどうかわかりませんでしたが、他にどこに投稿すべきかわかりませんでした。)
Moin
82
データを提供するJSONが少しは役に立つかもしれません。見栄えは良くありませんが、/admin/config/user-fields.jsonを見て、以下のようなものを取得できます。
{
"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"
]
},
しかし、もちろん、これはインターフェース内の情報ほど見栄えの良いものではありません。
「いいね!」 1
stephtara
(Stephanie Booth)
83