您好,
我尝试按照文档通过外部 ID 获取用户:
https://docs.discourse.org/#tag/Users/paths/~1u~1by-external~1{external_id}.json/get
但无论尝试哪个用户,都返回“404 未找到”错误。使用相同的 URI、API 密钥和用户名,我可以成功获取分类和群组信息。有什么建议吗?
此致,
Mark Pemburn
Blue Ocean Ideas
您好,
我尝试按照文档通过外部 ID 获取用户:
https://docs.discourse.org/#tag/Users/paths/~1u~1by-external~1{external_id}.json/get
但无论尝试哪个用户,都返回“404 未找到”错误。使用相同的 URI、API 密钥和用户名,我可以成功获取分类和群组信息。有什么建议吗?
此致,
Mark Pemburn
Blue Ocean Ideas
@pfaffman 我不理解您的回复,其中没有包含答案。该主题说明了如何查找未记录的端点。而这个端点是有文档的,并且它是极少数无法通过这种方式逆向工程的 API 调用之一,因为 Ember 前端永远不会调用此特定 API 端点?
@mpemburn 应该可以工作,文档看起来是正确的。外部 ID 是您在远程数据库中的 ID,在启用 SSO 时传递。您能分享您的代码吗?
哎呀。通常情况下,当遇到“API 文档有误,我该如何……”这类问题时,我提供的链接就是答案。仔细一看,很明显涉及外部 ID 的内容无法通过用户界面访问。幸好马克有你这么细心的人在关注!
理论 #1:
大多数情况下(并非总是),外部 ID 是数据库 ID,因此是一个数值。你确定你的外部 ID 是 mark89 吗?SingleSignOnRecord.find_by(external_id: 'mark89') 是否返回了数据库记录?
理论 #2:
你的预发布站点未启用 SSO,而外部 ID 通常与 SSO 一同使用。你确定存在外部 ID 吗?
等等……你的请求头被放在了 Cookie 中?这不行……应该像这样:
curl --location --request GET 'https://discourse.example.com/u/by-external/mark89.json'
--header 'Accept: application/json'
--header 'Api-Key=[Api-Key]'
--header 'Api-Username=system'
啊,唉,那也不行。
我尝试使用 WordPress 的 Discourse 插件发送相同的请求,但同样无法工作,尽管通过邮箱获取用户的请求可以正常运作。我原本以为这可能是我们 Discourse 沙盒环境的问题(到目前为止我一直在此进行测试),于是我又在我们的生产环境中进行了测试,结果依然相同。目前不确定接下来该怎么办,但我确实需要解决这个问题。
Mark
你检查过我之前写的两个理论吗?那时我还没发现你发送认证头的方式有误。
理论 #1:
大多数情况下(并非总是如此),外部 ID 是数据库 ID,因此是一个数值。你确定你的外部 ID 是 mark89 吗?SingleSignOnRecord.find_by(external_id: 'mark89') 能返回数据库记录吗?
理论 #2:
你的测试站点未启用 SSO,而 SSO 通常与外部 ID 一起使用。你确定存在外部 ID 吗?
Richard,
好的,沙盒环境尚未配置 SSO,但生产环境已配置。我检查了生产环境中的用户记录,确认外部 ID 已设置,且确实为数字 ID。当我使用生产环境的凭证、URI 以及真实的外部 ID 进行测试时,仍返回相同的 404 错误。
另外,我不确定如何测试 SingleSignOnRecord.find_by(external_id: ‘mark89’)。这个功能在哪里?
Mark
cd /var/discourse
./launcher enter app
rails c
SingleSignOnRecord.find_by(external_id: 'mark89')