| 摘要 | Discourse 成员申请插件允许您在潜在成员加入您的 Discourse 社区之前,为其运行结构化的申请流程。 | |
| 仓库链接 | R23DPrinting-group / discourse-member-application · GitLab | |
| 安装指南 | 如何在 Discourse 中安装插件 |
discourse-member-application — 面向私有社区的预邀请申请系统
discourse-member-application 允许您在潜在成员加入您的 Discourse 社区之前,为其运行结构化的申请流程。申请人可在 /apply 页面填写可自定义的公开表单,管理员审核提交内容并批准或拒绝,获批的申请人将自动收到私密邀请链接。
GitLab: R23DPrinting-group / discourse-member-application · GitLab
背景故事
我运营着一个使用 Discourse 仅限邀请模式的私有社区。我们曾手动管理成员申请——使用 Google 表单、电子表格,并手动复制粘贴邀请链接。这种方法虽然可行,但无法扩展,且感觉与社区本身脱节。
我曾寻找能够处理预邀请申请的 Discourse 插件,但未能找到合适的方案,因此我决定自己开发。
演示
功能特性
可自定义的申请表单
表单完全通过管理面板中的“字段”选项卡构建,无需编写代码。支持的字段类型包括:文本、文本域、是/否、单选按钮、复选框组和复选框。字段支持标签、提示、必填/可选、启用/禁用以及条件显示(仅当另一字段具有特定值时显示该字段)。
管理员仪表板
通过专用的插件页面审核和管理所有申请。可按状态(待处理/已批准/已拒绝/已兑换)筛选,按邮箱或用户名搜索,并对大量列表进行分页。查看完整的申请详情,添加私密管理员备注,并单独或批量批准/拒绝申请。
审批流程
批准申请会生成一个单次使用的 Discourse 邀请链接,并通过邮件发送给申请人。拒绝申请会发送可自定义的拒绝邮件,并可选择附带反馈。当申请人兑换邀请并创建账户后,申请状态将自动更新为“已兑换”。获批成员可选择自动添加到指定的 Discourse 群组。
数据分析
“数据分析”选项卡显示汇总统计(总申请数、批准率、平均审核时间)、12 周提交与批准趋势图表,以及从“已提交”到“已批准”再到“已兑换”的转化漏斗。
管理员通知
当有新申请提交时,系统会向配置的用户名(若留空则通知所有管理员)发送私密消息。
可配置的用户体验
- 表单顶部的介绍文本(支持 Markdown)
- 提交后在
/apply/success页面显示的成功页面,包含可配置的消息(支持 Markdown) - 登录页面和需要登录的首页上显示“申请加入”按钮(可开关)
- 申请过期功能——在可配置的天数后自动拒绝待处理申请
可编辑的邮件模板
提交确认邮件和拒绝邮件均可通过 管理 → 自定义 → 邮件模板 进行编辑,无需修改代码。
安全性
速率限制(每个 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
设置您的表单
安装完成后,前往 管理 → 插件 → 成员申请 → 字段 以构建您的申请表单。
该插件默认包含以下字段(均可编辑或删除):
- 期望的用户名
- 请简单介绍一下自己
- 您是如何了解到我们的?
- 您目前是否属于其他类似的在线社区?(是/否)
- 如果是,是哪些?(条件字段——仅当上述选择“是”时显示)
- 供应商披露(复选框组)
- 诚实确认(复选框——系统字段,不可删除)
使用 添加字段 按钮创建新字段。使用上下箭头重新排序。若要设置条件字段,请编辑该字段并使用“仅当以下情况时显示”部分选择父字段和触发值。
工作流程
- 潜在成员访问您的网站并点击 申请加入(或直接导航至
/apply) - 他们填写表单并提交——无需账户
- 管理员收到私密消息通知
- 管理员在 管理 → 插件 → 成员申请 → 申请 中审核申请
- 管理员批准 → 申请人收到包含单次使用链接的邀请邮件
- 申请人兑换邀请并创建账户,申请状态更新为 已兑换
设置项
| 名称 | 描述 |
|---|---|
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 和功能请求。