通过 API 创建分阶段用户?

我正在考虑构建一个 webhook+api 网桥服务,以连接两个不同 Discourse 论坛上的给定类别。大致想法是:

  1. 每个服务器上都有一个用于主题和帖子事件的 webhook(可能还有点赞和已解决事件,但不是首要考虑因素)
  2. 一个监听器接收这些事件,并通过 API 在另一个服务器上复制该事件
    • 嗯,显然需要一些东西来防止循环(我绝对在写这个列表之前就考虑过这个问题了)
    • 检查另一个服务器上是否存在具有相同电子邮件地址的用户(使用电子邮件地址作为键,因为帐户系统可能没有相同的用户名)
    • 如果不存在这样的用户,则创建一个暂存用户
    • 更改暂存用户的通知设置,以便他们不会收到电子邮件通知(我在这里的某个地方看到过关于此可能性的帖子……)
    • 在相应的真实用户或暂存用户下创建或更新帖子
  3. 可能有一个定时例程来检查主题,确保没有遗漏任何内容,并可能重新排序,以便双方都同意

Understanding user statuses, roles, and permissions 中,我认为暂存用户基本上可以满足我们的需求——如果有人后来使用该电子邮件地址创建了帐户,他们就可以“认领”它,并像他们一直存在一样与他们所有的帖子进行交互。

但是,是否可以通过 API 创建暂存用户?我在 Discourse API Docs 中没有看到。

不确定这是否是您想要的?

3 个赞

嗯,可以这么说。正如该主题中的 OP(发帖人)所说,回复如下……

……在那里,答案基本上是注入一封电子邮件,让电子邮件处理代码来处理它。但这在这种情况下不起作用,因为我需要在创建帖子_之前_进行干预并关闭用户的电子邮件通知。

碰巧我们为拟议桥梁的_一侧_启用了 SSO-覆盖用户名,所以我认为创建一个类似“othersite-user”的东西可能是一种解决方法……但这不一定能在没有该 SSO 设置的情况下奏效。

如果传递 staged: true 给管理员用户创建调用不起作用,我猜我们会接受一个 PR 来启用它。

(我认为这在你的用例之外是一个相当小众的功能?)

也许你可以使用 handle_mail 路由来以该用户身份发布一封伪造的电子邮件?(哦,正如 @blake 建议 的那样)

这样就可以在必要时同时创建暂存用户和主题。

2 个赞

使用这种方法,用户创建的主题和回复看起来就像是通过电子邮件创建的。暂存用户只能通过电子邮件创建帖子。如果您尝试通过 API 为暂存用户创建非电子邮件帖子,您将收到无效访问错误。

暂存用户的方法似乎有些不对劲。也许值得调查一下用户是否有任何疑虑。如果您能获得用户的许可,您可以在镜像站点上创建活跃的非暂存用户,然后通过 API 发布他们的主题和评论。

传递 staged: true 会创建一个暂存用户。我假设这样创建的用户将能够通过电子邮件发帖。我的本地开发站点尚未配置为向 Discourse 发送电子邮件,因此目前我无法进行测试。

1 个赞

我想使用 discourse 作为通用的表单处理器来处理联系表单。我讨厌联系表单,但有些用户宁愿使用联系表单而不是发送电子邮件。即使我认为那些人做出了糟糕的决定,我也想让他们更容易联系我,以便他们能给我钱。

如果能在不依赖其他系统来处理表单和发送电子邮件的情况下,创建一条消息来创建暂存用户,那将非常方便。

我猜我需要创建一个插件来实现这一点,但这就是我的计划。

这是我为了摆脱 wordpress 而需要解决的为数不多的事情之一。

所以,也许我在插件中会像处理电子邮件一样处理帖子。这对于插件来说可能不难。这样就可以通过 API 来实现了。

2 个赞

我认为你可以使用一个向导(:mage: Custom Wizard Plugin)来实现这一点,而且不会太麻烦。你现在可以匿名创建向导。如果需要,我很乐意提供帮助!

3 个赞

是的,这可行:Creating a staged user with an API call - #8 by blake

1 个赞

哦!当然。邮件接收器就是这样发送邮件的。我想我需要一个端点,它可以接受来自任何表单的任意字段,将它们放入一个主题,然后将它们发送给我。这样我就不必公开 API 密钥了(作用域仅限于发送邮件,让 JavaScript 处理表单然后将其发送到现有端点似乎也不是那么糟糕)。

1 个赞