创建和配置自定义用户字段

:bookmark: 本指南介绍如何在 Discourse 中创建和配置自定义用户字段,包括如何将它们添加到注册表单、用户个人资料和用户目录中。

:person_raising_hand: 所需用户级别:管理员

自定义用户字段允许您从用户那里收集标准个人资料字段之外的额外信息。这些字段可以显示在用户卡片、用户摘要页面上,甚至可以使用 Data Explorer 插件进行检索。本指南将引导您完成创建和配置自定义用户字段的过程。

添加用户字段

  1. 前往 管理 > 社区 > 用户字段 (discourse.example.com/admin/config/user-fields)。

  2. 如果您尚未创建任何用户字段,您将看到此屏幕:

  3. 点击“添加用户字段”按钮以添加一个新字段。

选择字段类型

字段类型决定了用户在注册表单中看到的输入字段。根据您要收集的信息类型进行选择:

文本字段

  • 用于具有许多可能答案的简短问题(例如,“您在哪家公司工作?”)
  • 显示为单行 HTML 文本输入

文本域 (Textarea)

  • 用于可能需要较长、多行答案的问题(例如,“请介绍一下您自己”)
  • 显示为多行 HTML 文本域输入

日期 (Date)

  • 用于收集日期值(例如,“您的出生日期是?”)
  • 显示为日期选择器输入

确认 (Confirmation)

下拉列表 (Dropdown)

要为下拉列表字段添加选项:

  1. 点击选项输入框
  2. 输入一个答案并点击“创建”
  3. 对更多选项重复此操作

完成后的选项应如下所示:

多选 (Multiselect)

  • 用于用户可以从一组选项中选择多个答案的问题(例如,“您对哪些主题感兴趣?”)
  • 显示为多选输入
  • 选项的配置方式与下拉列表字段相同

设置字段名称和描述

  • 字段名称 (Field Name):显示在注册表单和用户个人资料的输入框之前
  • 字段描述 (Field Description):显示在输入框之后,以帮助用户填写该字段

:information_source: 字段名称和描述都是保存字段所必需的。

这是自定义字段在注册表单上的显示方式:

配置用户字段选项

字段要求 (Field Requirements)

  • 可选 (Optional) - 可选字段可以留空
  • 对所有用户 (For all users) - 当字段为所有用户必填时,所有帐户,包括已登录的用户,都将被强制填写。这在处理服务条款 (ToS) 要求等情况时非常有用。
  • 注册时 (On signup) - 所有新帐户都将被要求填写该字段。

此外,在创建表单底部,您会找到以下偏好复选框:

  • 注册后可编辑 (Editable after signup):允许用户从其个人资料页面更新该字段
  • 显示在公开个人资料上 (Show on public profile):在用户的摘要页面上显示该字段的值
  • 显示在用户卡片上 (Show on user card):在用户卡片上显示该字段的值
  • 可搜索 (Searchable):启用根据此字段的值在用户目录中搜索用户
  • 显示在注册表单上 (Show on signup form):控制字段是否显示在注册表单上。当字段要求设置为“对所有用户”或“注册时”,或者字段在注册后不可编辑时,此项会自动启用(且无法禁用)。

显示在公开个人资料上 (Show on public profile)

启用后,字段值将显示在用户的个人资料页面上:

显示在用户卡片上 (Show on user card)

启用后,字段值将显示在用户卡片上:

可搜索 (Searchable)

启用后,您可以根据用户的自定义字段值进行搜索:

保存和编辑字段

  1. 点击“保存”将字段添加到您站点的用户字段列表
  2. 要编辑字段,请点击列表中的相应“编辑”按钮
  3. 要删除字段,请点击其旁边的省略号菜单 (⋮) 并选择“删除”

将自定义字段添加到用户目录

  1. 前往用户目录
  2. 点击扳手图标:

  1. 勾选您想要显示的自定义用户字段
  2. 点击“保存”

选定的自定义字段现在将显示在用户目录表中:

39 个赞
Any Plugins/Easy Mods for an Extended User Profile
Add introductory text for sign-up
Setting Security Parameters: Log-In, Read-Only, Protected Groups
Theme-Component v Plugin: What's the difference
User preference on theme components
Private custom user fields...?
Users self-select Category on Registration... is it possible?
Can we implement a system for user remarks during registration for admin review?
User Field Prompt
New user reviews: admin assignment and logging of progress
User customizable theme components (how-to)
Add users to groups on signup
Announcing - Gender Pronouns Userfield on Meta
Add a custom per-user setting in a plugin
Welcome questions on the first screen for bio
How to add min or max values in custom fields?
Custom user fields not available in api
Grant Custom Badge Upon Reading ToS
Required vs. optional sign-up fields
Add users to groups through custom field automation
Terms of Service Checkbox
Hidden User Fields
Social Features
Where in Discourse can users publicly share PII?
Linking "static" information about member to topic posted
Using Discourse as a social media platform
Custom user post display
Disable account confirm emails when creating users via API
Links in additional fields
Clickable Social Icon Links on Profile
Extend Existing Controller?
Requiring acceptance of terms and conditions
"Fake" OAuth Provider?
Extend Existing Controller?
This freaking software works so well I can’t even
Allow users to block keywords
Customize Your Site Branding
Restrict the users to post in the groups who haven't uploaded their profile picture
Adding non-visible user custom fields to the API
Seeking Advice: making a discourse forum hyper local
Add custom fields to signup and login
Can add short message to verify? Just input phone number can sign up
Add terms when make new topic
Export custom field for users in discourse hosted forum
Customizing Sign-up and Log in
Grouping poll results by user custom field
Disclaimer for tutorials
How to add custom logic input on the signup page?
Terms of service changes in Discourse platform

我认为以下标题下缺少两张图片:

不确定这是否与 Meta.discourse.org 缺少图片 相关——我也会在那里发帖。

我看得到那些图片吗?(匿名窗口中也是)

1 个赞

我看不到那些

但第二个在我的引用中有效。

编辑

1 个赞

有趣的是,我可以在引文中看到第二张图片,但在原始帖子中看不到^^

1 个赞

嗯。这很有趣。我认为 Missing images at Meta.discourse.org 问题有一个修复程序即将推出,所以希望它能得到解决。:crossed_fingers:

2 个赞

是否需要修改设置来指定自定义用户字段的最大长度?目前,在我创建的这个“Test”字段(作为测试用户字段)中,我无法在我的用户配置文件中输入任何字符(甚至无法输入“Test”),如下图所示。

我想要一个字段类型:链接/URL,可以吗?

由于 URL 是文本,因此 text 字段在技术上是可行的,@Vaping_Community。但是,您可能正在寻找其他详细信息,例如值验证或类似功能。

您可以搜索或创建一个您心中所想的 Feature 主题。:slight_smile:

3 个赞

是否有计划允许自定义用户字段使用多行/组合框?:folded_hands:

请注意,如果您想在自定义用户字段中嵌入链接,则需要使用 HTML 语法!
<a>链接文本</a>

例如,要确认社区准则/政策:

1 个赞

我能否将 Auth0 SSO 中的自定义声明关联到自定义字段?目前,用户在 Auth0 中输入字段信息,然后在注册时必须再次输入。如果可能,我想将该值映射过来。

有可能,是的:

在您的 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 个赞

感谢 @dax

有没有办法在数据库中验证字段名?例如,我们有一个名字字段,我尝试了 custom.firstnamecustom.first_namecustom.firstName,但这些字段在注册屏幕上都没有被填充。

我已经检查了错误日志,以确认令牌字段如上所示。

深入研究一下这里的代码,这是否仅适用于 Discourse Connect SSO?我们正在使用 Auth0 插件。

语法应该是 custom.user_field_x,其中 x 是在 /admin/config/user-fields/{x}/edit 中显示的数字字段 ID。

Auth0 插件本身不提供此映射功能。

不过,仍有其他方法可以实现您所描述的功能:

  • 创建主题组件。您可以添加一个小型前端脚本,自动将 Discourse 自定义用户字段与 Auth0 中已存储的值同步。例如,当用户登录且字段为空时,脚本可以调用一个安全的端点(一个小型云函数),从 Auth0 获取字段值,并通过 API 更新 Discourse 配置文件。
  • 使用自动化工具。您还可以使用 Zapier 或 Make 等外部自动化服务,在 Discourse 之外执行同步。优点是您不必编写/维护代码,只需为第三方服务付费。
  • 定制开发。我们可以扩展 Auth0 插件本身,使其在登录时原生支持将自定义声明映射到用户字段,或者构建一个与 Auth0 插件配合使用的自定义插件。

主题组件方法的明显缺点是您需要自己编写和维护自定义代码,同时还要注意安全问题,避免引入潜在的错误或漏洞。老实说,我不会推荐这种解决方案用于您这样的生产环境。

如果我处于您的位置,我会更倾向于第二种选择,即使用第三方工具,或者考虑提交功能请求或定制工作请求(取决于我们项目经理的评估),以增强 Auth0 插件本身。

如果您有兴趣探索最后一种选择,我们可以私下继续讨论。

1 个赞

我想知道是否有比一次单击一个小的上下箭头来移动它们(一次移动一步)来重新组织长用户字段列表的更简单的方法……:face_with_peeking_eye:

在用户字段列表概览中,我找不到区分哪些字段在注册时存在且是必填的(例如“Je suis… Pays”)和哪些字段在注册表单中存在但不是必填的(“Mes attentes”)。是我遗漏了什么,还是这是一个疏忽?编辑字段才能查看它是可选的还是必需的,这非常麻烦。(不确定这里是否是提问的合适地方,不太确定该放在哪里。)

也许提供数据的 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 个赞

哦,那对我来说真的容易多了!
那是不是意味着我只需编辑那个文件就大功告成了?它在我的服务器上以这种形式存在吗,我在哪里可以找到它?:heart_eyes::heart_eyes::heart_eyes: