使用 DiscourseAPI Gem 生成用户 API 密钥时返回 404 错误

你好,

我一直在努力寻找这个问题的解决方案,希望这里有人能提供一些见解。最近我加入了一个新项目,接手了一位老开发者之前负责的工作。我最近将 Discourse 构建升级到了最新版本(此前已落后几个月),其他所有功能和 API 调用均按预期运行。

我尝试通过 API 从 Discourse 外部(即我们的网站)在 Discourse 中创建一个主题。我获取用户的 ID,然后使用 DiscourseAPI 的 by_external_id 方法在 Discourse 中查找该用户。找到后,我调用 generate_user_api_key(discourse_user['id']),传入该用户在 Discourse 中的 ID。

但返回了一个 DiscourseApi::NotFoundError / 404 错误,该错误仅在升级后出现。

任何帮助或指导都将不胜感激!

生成 API 密钥的路由已更改,但 Discourse API gem 中用于生成 API 密钥的方法仍在调用旧路由。这就是您收到 404 错误的原因。

我们将修复此问题。目前,如果您需要为用户生成 API 密钥,可以通过向 http://localhost:3000/admin/api/keys 发送 POST 请求来实现。以下是一个 CURL 请求示例。在示例中,我已将实际的 API 密钥替换为 $api_key

curl -X POST "http://localhost:3000/admin/api/keys" \
-H "Content-Type: multipart/form-data;" \
-H "Api-Key: $api_key" \
-H "Api-Username: system" \
-F "key[description]=a key for bobby" \
-F "key[username]=bobby"

您无需为此生成用户 API 密钥。相反,您可以将 client.api_username 设置为您希望用于发布帖子的用户名:

client.api_username = "susan"
client.create_topic(category: 5, title: "Susan's really awesome API topic", skip_validation: true, raw: "this is a test, this is only a test")

client.api_username = "bobby"
client.create_topic(category: 5, title: "Bobby's really awesome API topic", skip_validation: true, raw: "this is a test, this is only a test")

只要您在创建 client 时使用了“所有用户”API 密钥,此方法就能正常工作。

谢谢!

我更新了代码,改用“所有用户”密钥,而不是为每个用户生成一个密钥,并将用户的用户名作为 api_username 传递,问题已解决。