API bug:用户名中的最后一个点号导致错误

我们正在通过 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 个赞

用户名不能以句点结尾,因此这是预期的响应。我本打算检查源代码,但您可以尝试在此处创建一个带有尾随句点的帐户,这是不允许的。

4 个赞

感谢您的快速回复,Jay。您是否能马上知道该 API 端点是否能发送用户的电子邮件作为“用户名”,以便 Discourse 知道通过电子邮件查找用户?(我们使用 SSO 将我们的 Django 应用连接到 Discourse,因此 Discourse 应该拥有每个用户的这两个标识符)

1 个赞

哦!是的,我知道。我前几天注意到,您可以使用电子邮件地址作为将用户添加到组的端点。不过,这可能是非管理员路由。只需将 email 作为字段名以及地址包含进去即可。

不过,如果您使用的是 Discourse Connect,那么您可以在登录时管理组,这可能比折腾 API 更符合您的需求。

1 个赞

感谢跟进。

我们确实使用 Discourse Connect,但也使用 API。

顺便说一下,您提到“可能是非管理员路由”

所以那个 PUT 请求将是:

/groups/{group_id}/members.json

…并将 'email': (user email) 作为有效负载…然后 Discourse 知道我的用户有权限添加该用户到该组?

(…抱歉,我不清楚为什么对于同一个操作会有两个路由…)

我认为是的。我使用了 如何逆向工程 Discourse API 来找出路径。然后,我猜想,查看了源代码,发现用户 ID 和电子邮件地址也有效。

是的,sso 仅在登录时更新群组,因此 API 是您的解决方案。