このガイドでは、Discourseでカスタムユーザーフィールドを作成・設定する方法を説明します。登録フォーム、ユーザープロフィール、ユーザーディレクトリに追加する方法も含まれています。
必要なユーザー権限: 管理者
カスタムユーザーフィールドを使用すると、標準のプロフィール項目に加えて、ユーザーから追加情報を収集できます。これらのフィールドは、ユーザーカードやユーザー概要ページに表示でき、Data Explorerプラグインを使用して取得することもできます。このガイドでは、カスタムユーザーフィールドの作成と設定の手順を説明します。
ユーザーフィールドの追加
-
管理画面 > コミュニティ > ユーザーフィールド (discourse.example.com/admin/config/user-fields) に移動します。
-
まだユーザーフィールドを作成していない場合、以下の画面が表示されます:
-
新しいフィールドを追加するには、「ユーザーフィールドを追加」ボタンをクリックします。
フィールドタイプの選択
フィールドタイプは、登録フォームでユーザーが見る入力フィールドを決定します。収集する情報の種類に基づいて選択してください:
テキストフィールド
- 回答の可能性が多い短い質問に使用します(例: 「どの会社で働いていますか?」)
- 1行のHTMLテキスト入力として表示されます
テキストエリア
- より長く、複数行の回答が必要な質問に使用します(例: 「自己紹介をしてください」)
- 複数行のHTMLテキストエリア入力として表示されます
日付
- 日付値の収集に使用します(例: 「生年月日は何ですか?」)
- 日付ピッカー入力として表示されます
確認
- はい/いいえの質問に使用します(例: 「ニュースレターへの登録を希望しますか?」)
- HTMLチェックボックスとして表示されます
- HTMLを使用して、ユーザーが確認するために重要なリンクを追加できます。例:
コミュニティガイドラインを読み、遵守することに同意します <a href="https://meta.discourse.org/guidelines">コミュニティガイドライン</a>
ドロップダウン
- 回答の選択肢が決まっている質問に使用します(例: 「あなたの性別は何ですか?」)
- HTMLセレクト入力として表示されます
ドロップダウンフィールドにオプションを追加するには:
- オプション入力欄をクリックします
- 回答を入力し、「作成」をクリックします
- 追加のオプションがある場合は繰り返します
完成したオプションは、以下のような見た目になります:
複数選択
- 複数の回答をオプションから選択できる質問に使用します(例: 「どのトピックに興味がありますか?」)
- 複数選択入力として表示されます
- オプションは、ドロップダウンフィールドと同じ方法で設定します
フィールド名と説明の設定
- フィールド名: 登録フォームとユーザープロフィールの入力欄の前に表示されます
- フィールド説明: ユーザーがフィールドを記入するのを助けるために、入力欄の後に表示されます
フィールド名と説明は、フィールドを保存するために両方とも必須です。
カスタムフィールドが登録フォームに表示される様子は以下の通りです:
ユーザーフィールドオプションの設定
フィールドの必須要件
- 任意 - 任意のフィールドは、ユーザーが空欄のままにすることができます
- 全ユーザーに必須 - フィールドが全ユーザーに必須の場合、ログイン中のユーザーを含むすべてのアカウントで、そのフィールドの入力が強制されます。利用規約(ToS)の要件などの場合に非常に有用です。
- 登録時に必須 - すべての新規アカウントで、そのフィールドの入力が必須になります。
また、作成フォームの下部には、以下の設定チェックボックスがあります:
- 登録後に編集可能: ユーザーがプロフィールページからフィールドを更新できるようにします
- 公開プロフィールに表示: ユーザーの概要ページにフィールド値を表示します
- ユーザーカードに表示: ユーザーカードにフィールド値を表示します
- 検索可能: ユーザーディレクトリで、このフィールドの値に基づいてユーザーを検索できるようにします
- 登録フォームに表示: フィールドが登録フォームに表示されるかを制御します。フィールドの必須要件が「全ユーザーに必須」または「登録時に必須」の場合、またはフィールドが登録後に編集できない場合は、自動的に有効になります(無効にすることはできません)。
公開プロフィールに表示
有効にすると、フィールド値がユーザーのプロフィールページに表示されます:
ユーザーカードに表示
有効にすると、フィールド値がユーザーカードに表示されます:
検索可能
有効にすると、カスタムフィールドの値に基づいてユーザーを検索できます:
フィールドの保存と編集
- サイトのユーザーフィールドリストにフィールドを追加するには、「保存」をクリックします
- フィールドを編集するには、リスト内の該当するフィールド横の「編集」ボタンをクリックします
- フィールドを削除するには、横の省略記号メニュー (⋮) をクリックし、「削除」を選択します
ユーザーディレクトリにカスタムフィールドの追加
- ユーザーディレクトリに移動します
- レンコンアイコンをクリックします:
- 表示したいカスタムユーザーフィールドにチェックを入れます
- 「保存」をクリックします
選択したカスタムフィールドは、ユーザーディレクトリのテーブルに表示されるようになります:
「いいね!」 40
これらの見出しの下に画像が2つ不足していると思います。
Meta.discourse.orgの画像欠落についてに関連しているか分かりませんが、そちらにも投稿します。
引用では2枚目の画像が見えますが、元の投稿では見えません^^
「いいね!」 1
なるほど。それは興味深いですね。Missing images at Meta.discourse.org の問題に対する修正が来ると思うので、それで解決されるといいですね。
「いいね!」 2
カスタムユーザーフィールドの最大長を指定するために変更する必要がある設定はありますか?現在、テスト用のユーザーフィールドとして作成したこの「テスト」フィールドでは、ユーザープロファイルに1文字も入力できません(表示されているように「テスト」さえも)。
maiki
(maiki)
68
URLはテキストなので、技術的にはテキストフィールドで動作しますが、@Vaping_Community さん。ただし、値の検証など、より詳細な情報を求めているのかもしれませんね。
今考えていることをまとめて、Contribute > 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