pfaffman
(Jay Pfaffman)
1
我正在尝试使用 API 创建一个活跃用户。
这可以从 curl 中完成:
curl -X POST "https://community.co/users.json" -H "Api-Key: $API_KEY" -H "Api-Username: system" -H "Content-Type: multipart/form-data" -F "name=XXXXApp Tester" -F "email=XXXapptester2@example.com" -F "username=XXXapptester21" -F "active=true" -F "approved=true" -F "password=simplepass"
当我从 Zapier 进行相同的调用时(我在 production.log 中看到 Parameters 看起来相同),日志中会出现这个:
Filter chain halted as :respond_to_suspicious_request rendered or redirected
并且什么也没有发生。
有什么办法可以绕过这个问题吗?
def suspicious?(params)
return false if current_user && is_api? && current_user.admin?
honeypot_or_challenge_fails?(params) || SiteSetting.invite_only?
end
2 个赞
simon
2
我猜它会在 is_api? 上失败。查看代码,我不清楚为什么它会因 Zapier 的请求而失败,但我看不到其他可能失败的地方。
我对此感兴趣是因为几周前有人问我关于通过 Zapier 创建用户的相同问题。
2 个赞
pfaffman
(Jay Pfaffman)
3
我的另一个想法是 Zapier 没有正确传递 API 密钥,但我认为我会收到不同的错误。
我猜是同一个人。 
2 个赞
bedgarsf
(Brian Edgar)
4
是的。我很惊讶这不起作用,但至少现在我知道不是我一个人遇到这个问题了。
我正在考虑使用外部数据库和 Zapier 或 Make(我在 Make 上也遇到了类似的错误)之类的自动化工具作为试点项目的概念验证。
在短期的试点阶段,我可以不用这些工具,但从长远来看,Discourse 将是一个更大平台的一部分,我肯定需要在一个拥有会员管理和其他服务的独立后端中管理会员。
1 个赞
simon
5
我怀疑问题出在您在 Zapier 上构建请求的方式。使用 Zapier 的 Webhooks 操作,请尝试以下方法:
选择“POST”作为事件。然后:
URL:https://forum.example.com/users.json
Payload Type:“json”
Data:
name:<用户的全名>(在文档中显示为必填项,但可以省略)
username:用户的用户名
email:用户的电子邮件
password:符合您网站要求的密码
active:“true”(带引号)
approved:“true”(带引号)
填写 Headers 部分以添加您的 Api-Key 和 Api-Username(我只尝试过将 Api-Username 设置为 system)。
使用所有其他部分的默认值。
这里有几张带有虚假数据的截图:
这对我来说是有效的。如果无效,另一个要检查的事情是确保您的 Discourse 网站上未启用“仅限邀请”设置。
为了查看它是否有效,我还使用 Zapier CLI 创建了一个自定义集成来创建新用户。如果 Discourse 需要,该操作可以添加到官方 Discourse Zap 中。我不确定添加创建用户的操作是否是优先事项。我认为它不像创建邀请或暂停用户那样经常被请求。
进一步测试的注意事项:
-
Payload Type 可以设置为“json”或“form”。要使用请求设置自定义字段,需要将 Payload Type 设置为“form”。
-
多选自定义字段有点问题。Zapier 不允许在 Data 部分中有重复的键名。应该可以使用 Zapier 的“Custom Request”操作来设置多选自定义字段。
-
active 和 approved 参数的值不需要用引号括起来。
2 个赞
bedgarsf
(Brian Edgar)
6
@simon 谢谢!我成功了!您的截图帮助我解决了 Zapier 创建数据字段时出现的问题。它在做一些奇怪的事情,但我基本上不明白如何格式化/映射数据到 Airtable。我需要让端到端的自动化工作,但创建用户肯定成功了。
另外, FYI @pfaffman
4 个赞
bedgarsf
(Brian Edgar)
7
你好 @simon - 再次感谢你对格式的帮助。现在我正尝试向用户配置文件添加一些自定义字段,看看是否能让 Zapier 在新的 Discourse 用户中填充它们。这似乎导致整个请求失败,并且我收到一条消息“您尚未完成所有用户字段”。
我找到了这篇帖子,所以我尝试将其从 json 切换到 form,但这不起作用。
关于如何格式化自定义配置文件字段,有什么建议吗?谢谢!
1 个赞
simon
8
将有效负载类型更改为“form”对我来说有效:
除了那种方法不适用于多选下拉字段。对于那种类型的字段,我认为您必须使用“自定义请求”操作。可能需要一些调整才能使其正常工作。
1 个赞
bedgarsf
(Brian Edgar)
9
哇——你真是 Zapier + Discourse 的大巫师。更改红色箭头,第一次就成功了。我把它作为字段的名称,但当然,考虑到上游不知道这一点,这毫无意义。所以,我创建的每一个新字段都只使用 [#],它会自动按顺序映射它们吗?我计划创建大约 10 个。另外,即使我的测试字段是下拉列表,它似乎也能正常工作——也许是因为它只是从 Airtable 中提取的?
1 个赞
bedgarsf
(Brian Edgar)
10
实际上,我并没有进行真正的端到端测试。我只是测试了 Zap,但它在下拉字段上确实有效。
simon
11
是的,只需将字段的 id 放在 [] 中。您可以通过加载 Admin / Customize / User Fields 页面的 JSON 版本(/admin/customize/user_fields.json)来获取字段的 id。
(如果您有格式化 JSON 的浏览器扩展,阅读起来会更容易。)
下拉列表字段应该没问题。只有多选字段才会有问题。例如,我上面截图中的“hobbies”字段。
1 个赞
bedgarsf
(Brian Edgar)
12
啊,多选——是的,我错过了那部分。我现在只有单选下拉菜单。
太棒了。谢谢!!!
1 个赞
想知道是否可以再次打开这个问题并询问有关创建群组的事宜?
- 我可以毫无问题地从 Zapier 创建用户(即使启用了“仅限邀请”)

Zapier 界面允许单独的 API 标头,但当它需要一个对象(创建 group 似乎需要)时……即使我手动编辑正文以使其格式符合 API 文档的要求,我也会得到这个:
创建 Discourse 自定义操作失败
原始请求失败。执行请求时出错:错误代码 400:参数缺失或值为空:group
我能否使用 Zapier 发送初始对象 group { 并将其关闭?
任何见解都将是惊人的,非常感谢!
我解决了——我必须使用 Zapier 的 Webhooks 完全自定义模式,这样我才能手动输入所有标头。
然后我只是粘贴到数据/正文区域,它就起作用了……在任何其他模式下它都无法正常工作。
3 个赞