我们正在通过 API(通过 pydiscourse)将 Discourse 集成到我们的网站中。
当需要通过 API 将用户添加到 Discourse 组时,pydiscourse 会使用 PUT 方法向 Discourse API URL 发送请求:
/admin/groups/{group_id}/members.json
…并通过“usernames”变量传入用户名。
如果用户名中包含“.”,则没有问题,除非该“.”出现在最后一个字符,在这种情况下,API 将返回一个错误消息:
You supplied invalid parameters to the request: usernames
1 个赞
pfaffman
(Jay Pfaffman)
2
用户名不能以句点结尾,因此这是预期的响应。我本打算检查源代码,但您可以尝试在此处创建一个带有尾随句点的帐户,这是不允许的。
4 个赞
感谢您的快速回复,Jay。您是否能马上知道该 API 端点是否能发送用户的电子邮件作为“用户名”,以便 Discourse 知道通过电子邮件查找用户?(我们使用 SSO 将我们的 Django 应用连接到 Discourse,因此 Discourse 应该拥有每个用户的这两个标识符)
1 个赞
pfaffman
(Jay Pfaffman)
4
哦!是的,我知道。我前几天注意到,您可以使用电子邮件地址作为将用户添加到组的端点。不过,这可能是非管理员路由。只需将 email 作为字段名以及地址包含进去即可。
不过,如果您使用的是 Discourse Connect,那么您可以在登录时管理组,这可能比折腾 API 更符合您的需求。
1 个赞
感谢跟进。
我们确实使用 Discourse Connect,但也使用 API。
顺便说一下,您提到“可能是非管理员路由”
所以那个 PUT 请求将是:
/groups/{group_id}/members.json
…并将 'email': (user email) 作为有效负载…然后 Discourse 知道我的用户有权限添加该用户到该组?
(…抱歉,我不清楚为什么对于同一个操作会有两个路由…)
pfaffman
(Jay Pfaffman)
6
我认为是的。我使用了 如何逆向工程 Discourse API 来找出路径。然后,我猜想,查看了源代码,发现用户 ID 和电子邮件地址也有效。
是的,sso 仅在登录时更新群组,因此 API 是您的解决方案。