Discourse 成员申请

:information_source: 摘要 Discourse 会员申请 (Discourse Member Application) 允许您在潜在会员加入您的 Discourse 社区之前,运行结构化的申请流程。
:hammer_and_wrench: 代码仓库链接 GitHub - R23DPrinting/discourse-member-application · GitHub
:open_book: 安装指南 如何在 Discourse 中安装插件

discourse-member-application — 私有社区的预邀请申请系统

discourse-member-application 允许您在潜在会员加入您的 Discourse 社区之前,运行结构化的申请流程。申请人填写一个可定制的公开表单(位于 /apply),管理员审核提交的内容并批准或拒绝,被批准的申请人会自动收到一个私密的邀请链接。

:link: GitHub: GitHub - R23DPrinting/discourse-member-application · GitHub


起因

我运营着一个使用 Discourse 仅限邀请模式的私有社区。我们之前手动管理会员申请——使用 Google 表单、电子表格,手动复制粘贴邀请链接。这种方式可行,但无法扩展,而且感觉与社区本身是脱节的。

我寻找了一个可以处理预邀请申请的 Discourse 插件。我没有找到合适的。于是我构建了这个插件。


演示


特性

:clipboard: 可定制的申请表单
表单完全通过管理员面板中的“字段 (Fields)”标签页构建——无需代码。支持的字段类型:文本 (text)、多行文本 (textarea)、是/否 (yes/no)、单选按钮 (radio)、复选框组 (checkbox group) 和复选框 (checkbox)。字段支持标签、提示、必填/选填、启用/禁用以及条件可见性(仅在另一个字段具有特定值时显示该字段)。

:magnifying_glass_tilted_left: 管理员仪表板
从专用的插件页面审核和管理所有申请。可以按状态(待处理 / 已批准 / 已拒绝 / 已兑换)过滤,按电子邮件或用户名搜索,并对大型列表进行分页。可以查看完整的申请详情,添加私密的管理员备注,并可以单独或批量批准或拒绝。

:white_check_mark: 批准流程
批准申请会生成一个单次使用的 Discourse 邀请并以电子邮件形式发送给申请人。拒绝则会发送一封可定制的拒绝邮件,并可附带反馈。当申请人兑换邀请并创建账户后,申请状态会自动更新为“已兑换 (Redeemed)”。被批准的成员可以选择自动添加到 Discourse 群组中。

:bar_chart: 分析
“分析 (Analytics)”标签页显示摘要统计数据(总申请数、批准率、平均审核时间)、提交与批准的 12 周趋势图,以及从提交 → 批准 → 兑换的转化漏斗图。

:bell: 管理员通知
当收到新的申请时,会向配置的用户名(如果留空则通知所有管理员)发送私信。

:artist_palette: 可配置的用户体验 (UX)

  • 表单顶部的介绍文本(支持 Markdown)
  • 提交后在 /apply/success 上的成功页面,带有可配置的消息(支持 Markdown)
  • 登录页面和需要登录的主页上的“申请加入 (Apply to Join)”按钮(可切换)
  • 申请过期——在可配置的天数后自动拒绝待处理的申请

:e_mail: 可编辑的邮件模板
确认提交和拒绝邮件都可以通过“管理员 → 自定义 → 邮件模板 (Admin → Customize → Email Templates)”进行编辑——无需修改代码。

:locked: 安全性
速率限制(每小时每个 IP 5 次提交)、重复提交检测(阻止使用已批准/待处理的电子邮件或用户名的重复提交,并阻止已注册的电子邮件/用户名)以及单次使用邀请。


配置

安装

将以下内容添加到您的 /var/discourse/containers/app.yml

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/R23DPrinting/discourse-member-application.git

然后重建:

cd /var/discourse && ./launcher rebuild app

设置您的表单

安装后,转到管理员 → 插件 → 会员申请 → 字段 (Admin → Plugins → Member Application → Fields) 来构建您的申请表单。

该插件默认附带以下字段(全部可编辑或删除):

  1. 期望的用户名
  2. 介绍一下你自己
  3. 您是如何得知我们的?
  4. 您目前是否在任何其他类似的在线社区中?(是/否)
  5. 如果是,是哪些?(条件性——仅在上方选择“是”时显示)
  6. 供应商披露(复选框组)
  7. 诚实确认(复选框——系统字段,不可删除)

使用添加字段 (Add field) 按钮创建新字段。使用向上/向下箭头重新排序。要使字段具有条件性,请编辑该字段并使用“仅在以下情况下显示”部分选择父字段和触发值。

工作流程

  1. 潜在会员访问您的网站并点击申请加入 (Apply to Join)(或直接导航到 /apply
  2. 他们填写表单并提交——无需账户
  3. 管理员收到私信通知
  4. 管理员在管理员 → 插件 → 会员申请 → 申请 (Admin → Plugins → Member Application → Applications) 中审核申请
  5. 管理员批准 → 申请人收到带有单次使用链接的邀请邮件
  6. 申请人兑换邀请,创建账户,并且申请状态更新为已兑换 (Redeemed)

设置

名称 描述
member_application_enabled 启用或禁用 /apply 处的申请表单
member_application_notify_usernames 新提交时通过私信通知的逗号分隔的用户名列表。留空则通知所有管理员。
member_application_invite_group 批准时添加到邀请中的群组名称(留空则跳过)
member_application_expiry_days 待处理申请在这么多天后自动拒绝(0 = 永不)
member_application_expiry_notify 在自动过期申请时发送拒绝邮件
member_application_show_apply_button 在登录页面和需要登录的主页上显示“申请加入”按钮
member_application_apply_button_text “申请加入”按钮的标签(默认:“Apply to Join”)
member_application_intro_text 显示在申请表单顶部的介绍性文本。支持 Markdown。留空则隐藏。
member_application_success_message 提交后在 /apply/success 页面上显示的消息。支持 Markdown。

备注

  • 与社区无关——所有默认字段文本可通过“字段”标签页进行配置
  • 兼容 Discourse 的 login_required / 仅限邀请模式
  • MIT 许可
  • 在 Discourse 2026.3.0 上测试过

欢迎在 GitHub 上提交问题、拉取请求和功能请求。

:link: GitHub - R23DPrinting/discourse-member-application · GitHub

5 个赞