Discourse 会员申请

:information_source: 摘要 Discourse 成员申请插件允许您在潜在成员加入您的 Discourse 社区之前,为其运行结构化的申请流程。
:hammer_and_wrench: 仓库链接 R23DPrinting-group / discourse-member-application · GitLab
:open_book: 安装指南 如何在 Discourse 中安装插件

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

discourse-member-application 允许您在潜在成员加入您的 Discourse 社区之前,为其运行结构化的申请流程。申请人可在 /apply 页面填写可自定义的公开表单,管理员审核提交内容并批准或拒绝,获批的申请人将自动收到私密邀请链接。

:link: GitLab: R23DPrinting-group / discourse-member-application · GitLab


背景故事

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

我曾寻找能够处理预邀请申请的 Discourse 插件,但未能找到合适的方案,因此我决定自己开发。


演示


功能特性

:clipboard: 可自定义的申请表单
表单完全通过管理面板中的“字段”选项卡构建,无需编写代码。支持的字段类型包括:文本、文本域、是/否、单选按钮、复选框组和复选框。字段支持标签、提示、必填/可选、启用/禁用以及条件显示(仅当另一字段具有特定值时显示该字段)。

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

:white_check_mark: 审批流程
批准申请会生成一个单次使用的 Discourse 邀请链接,并通过邮件发送给申请人。拒绝申请会发送可自定义的拒绝邮件,并可选择附带反馈。当申请人兑换邀请并创建账户后,申请状态将自动更新为“已兑换”。获批成员可选择自动添加到指定的 Discourse 群组。

:bar_chart: 数据分析
“数据分析”选项卡显示汇总统计(总申请数、批准率、平均审核时间)、12 周提交与批准趋势图表,以及从“已提交”到“已批准”再到“已兑换”的转化漏斗。

:bell: 管理员通知
当有新申请提交时,系统会向配置的用户名(若留空则通知所有管理员)发送私密消息。

:artist_palette: 可配置的用户体验

  • 表单顶部的介绍文本(支持 Markdown)
  • 提交后在 /apply/success 页面显示的成功页面,包含可配置的消息(支持 Markdown)
  • 登录页面和需要登录的首页上显示“申请加入”按钮(可开关)
  • 申请过期功能——在可配置的天数后自动拒绝待处理申请

:e_mail: 可编辑的邮件模板
提交确认邮件和拒绝邮件均可通过 管理 → 自定义 → 邮件模板 进行编辑,无需修改代码。

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


配置

安装

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

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://gitlab.com/r23dprinting-group/discourse-member-application.git

然后重新构建:

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

设置您的表单

安装完成后,前往 管理 → 插件 → 成员申请 → 字段 以构建您的申请表单。

该插件默认包含以下字段(均可编辑或删除):

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

使用 添加字段 按钮创建新字段。使用上下箭头重新排序。若要设置条件字段,请编辑该字段并使用“仅当以下情况时显示”部分选择父字段和触发值。

工作流程

  1. 潜在成员访问您的网站并点击 申请加入(或直接导航至 /apply
  2. 他们填写表单并提交——无需账户
  3. 管理员收到私密消息通知
  4. 管理员在 管理 → 插件 → 成员申请 → 申请 中审核申请
  5. 管理员批准 → 申请人收到包含单次使用链接的邀请邮件
  6. 申请人兑换邀请并创建账户,申请状态更新为 已兑换

设置项

名称 描述
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 “申请加入”按钮的标签(默认:“申请加入”)
member_application_intro_text 显示在申请表单顶部的介绍文本。支持 Markdown。留空则隐藏。
member_application_success_message 提交后在 /apply/success 页面显示的消息。支持 Markdown。

注意事项

  • 与社区无关——所有默认字段文本均可通过“字段”选项卡进行配置
  • 兼容 Discourse 的 login_required / 仅限邀请模式
  • 采用 MIT 许可证
  • 已在 Discourse 2026.3.0 版本上测试

欢迎在 GitLab 上提交问题、PR 和功能请求。

:link: R23DPrinting-group / discourse-member-application · GitLab

11 个赞

更新:仓库已迁移至 GitLab。上文中的所有链接均已更新。

:link: https://gitlab.com/r23dprinting-group/discourse-member-application

1 个赞