在最新版 Discourse 中失效
我最近更新了 Discourse,这个插件导致网站崩溃了。(坦率地说,这更可能是我的糟糕修改导致的结果,而不是 Discourse 本身的问题。我目前没有精力去找到解决方案,所以只是留个警告给其他人。)
| 摘要 | 在任何标记为 contact 的主题顶部添加一个联系表单。通过表单提交的信息将发送到配置为接收的组或类别。 |
|
| 仓库链接 | https://github.com/jericson/discourse-contact-plugin | |
| 安装指南 | 如何在 Discourse 中安装插件 |
功能
启用后,“联系表单”插件会在任何标记为 contact 的主题顶部放置一个联系表单。通过表单提交的数据会发送到配置为接收来自 contact_form_email 邮件的类别或组。[1] 与传统的联系表单一样,提交者不需要拥有网站账户。
访客可能会看到以下内容:
请注意,这是一个常规帖子,可以在正文中包含您可能希望包含的任何说明。[2] 目前字段名称是硬编码的,没有进行真正的验证,但请参阅下面的 待办事项部分。消息发送后,它将显示在配置的组的消息流中:
根据其邮件通知的配置方式,配置组的成员也可能从 Discourse 收到邮件:
配置
为了使用此插件,您必须配置接收邮件以创建新主题或组消息。不需要设置邮件回复,因为插件实际上不发送邮件。它会劫持 API 来模拟传入邮件。(话虽如此,邮件回复是一个有用的功能!)
特别是,此插件要求:
email_in和enable_staged_users
被启用。
启用后,任何标记为 contact 的主题都会在 topic-above-posts 插件插槽中添加一个联系表单。
发送到组
由于人们将使用此表单提交他们的个人信息,因此将结果发送到一个封闭的组是最安全的选择。
- 为将要处理联系信息的人创建一个新组。(我通常为简单起见称之为“联系人”,但它可以是任何东西,包括现有组。)
- 添加将接收联系信息的人员。
- 不要勾选任何访问选项。这应该是一个封闭的组。
- 根据您组织的需要合理地更改组的可见性。
- 将“自定义接收邮件地址”设置为与
contact_form_email设置相同。(默认情况下,这是“contact@example.com”)。
…
发送到类别
也可以使用“自定义接收邮件地址”类别设置发送到类别。同时确保启用“接受没有账户的匿名用户的邮件”。
但是,不建议将联系信息发送到类别! 如果由于某种原因更改了类别的访问权限,可能会将个人信息泄露给不应该访问的人(或搜索引擎)。如果将联系信息发送到组消息中,这种情况发生的可能性要小得多。
限制谁可以添加联系表单
联系表单可能在各处冒出,这可能很奇怪,所以您可能希望限制谁可以使用 contact 标签。为此,请创建一个新的标签组:
- 从
/tags页面,选择右上角的扳手图标。 - 选择“管理标签组”,然后选择“
新建组”。 - 填写一个合适的名称(例如“仅限员工”),添加
contact标签,然后选择“标签对所有人可见,但只有以下组可以使用它们”。 - 选择您希望允许添加联系表单的组(通常是“staff”或“admins”)并保存标签组。
变更日志
- 2024 年 4 月 25 日:Alpha 版本发布。
待办事项
- 我想设置测试,以确保我在进行更改时没有破坏任何东西。我特别想验证没有账户的人可以提交他们的数据。
- 在测试过程中,我发现了一个重大的数据泄露。我已经移除了那个特定的漏洞,但我真的很需要一些测试方面的帮助。
- 表单没有进行任何验证。唯一真正的要求是电子邮件字段看起来像一个电子邮件。如果有人在没有添加电子邮件的情况下留下了回复,表单会静默失败。
- 没有防止垃圾邮件或滥用的保护措施。
- 代码的质量非常像是“我的第一个插件”,基于使用过时约定的示例。欢迎对样式提出任何建议。
- 我喜欢将联系表单与标记为“contact”的主题相关联,但这很复杂,而且可能不必要。我正在考虑添加一个仅包含联系表单的新路由以简化操作。
- 联系数据存储在数据库中,但查看联系人列表的管理员面板可能会很有用。
- 表单已固定以满足我当前的要求,但能够灵活地选择提示哪些字段会很方便。





