有条件地允许新用户注册

你好,

我刚开始接触 Discourse 的管理与开发,还不会 Ruby(不过我完全愿意学习)。我的第一个任务是搭建 Discourse 实例,我已经在 Digital Ocean 上使用官方 Docker 镜像完成了这一步。目前进展顺利——要向让这一切变得如此简单的人们致敬!

接下来的任务对我来说更具挑战性。我自愿为一家非营利组织搭建 Discourse,该组织希望将用户注册和参与权限限制为仅限其成员。因此,我需要以某种方式修改、挂钩(或替换)新用户创建流程,以便在程序上验证提交的电子邮件地址是否与现有组织的当前成员匹配,并确认该成员的到期日期是否在未来。

该组织使用的是 NeonCRM,他们提供的 API 使得这种验证相对容易。据我所知,Discourse 也提供了 API,可以执行任何手动操作所能完成的任务。因此,从理论上讲,实现我的目标是完全可行的,对吧?问题在于最佳方案是什么。

例如,如果 Discourse 允许你编写一个事件监听器(或插件)来监听新用户注册,执行上述验证逻辑,并在必要时中止注册,同时显示一条 informative 消息(例如:“抱歉,您需要成为 XYZ 协会的成员”),那就太棒了。

或者,我可以想象自己编写一个用户注册页面(使用我熟悉的 PHP 语言),该页面会同时调用两个 API。但那样的话,我就需要以某种方式“修改”我的 Discourse 安装,使注册页面将用户重定向到我的自定义版本。

因此,我非常希望能听到一些关于整体策略的建议,以及我应该从哪里开始学习以实现这一目标。

非常感谢!

2 个赞

您可以通过电子邮件域名限制注册。如果您的用户都使用同一个域名,那么该组织以外的人员将无法加入。在设置中搜索“允许的电子邮件域名”。

用户必须使用以下电子邮件域名注册账户,多个域名之间用竖线分隔。警告:使用未列出的电子邮件域名的用户将无法注册!

2 个赞

啊,如果可能的域名集合限制在合理范围内,那或许行得通。但在这种情况下,电子邮件地址是任意的。感谢你的建议。

2 个赞

这有帮助吗?

@Jonathan5 感谢您的建议。我浏览了那个帖子,坦率地说,那看起来简直是一场噩梦。更重要的是,本协会的会员并不直接使用 NeonCRM 登录任何系统,只有协会管理员才会使用。这很复杂。

我还有另一个想法。我目前将 Discourse 设置为仅限邀请注册。假设我保持这一设置,但修改登录页面的文字,改为类似“请访问 my.example.org/discourse-invitation 以申请邀请”的提示。在该 URL 处,我将部署一个脚本,利用 NeonCRM API 验证潜在用户的会员资格,若验证通过,则调用 Discourse API 创建用户并发送邀请。我认为我的思路是合理的。您觉得对吗?