DiscourseAPI Gem でユーザー API キーを生成する際に 404 エラーが発生

こんにちは、

この問題の解決策を見つけるのに苦労しており、ここにいる誰かが何かヒントを持っていることを願っています。最近、新しいプロジェクトに参加し、以前の開発者に代わって作業を引き継ぎました。Discourse のビルドを最新バージョンにアップグレードしたところ、数ヶ月遅れでしたが、他のすべての機能や API 呼び出しは期待通りに動作しています。

私が行おうとしているのは、Discourse 外の当社のウェブサイトから API を使用して Discourse にトピックを作成することです。ユーザーの ID を取得し、DiscourseAPI の by_external_id メソッドを使用して Discourse 内の該当ユーザーを検索します。その後、generate_user_api_key(discourse_user['id']) を呼び出し、Discourse 上のユーザー ID を渡します。

これに対する応答として DiscourseApi::NotFoundError / 404 エラーが表示されますが、これはアップグレード後に発生し始めた問題です。

ご助力やご助言をいただければ幸いです!

「いいね!」 2

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 キーを使用していれば、これは正しく機能します。

「いいね!」 3

ありがとうございます!

コードを修正し、各ユーザー用にキーを生成する代わりに「All Users」キーを使用するように変更し、api_username としてユーザー名を渡すようにしました。これで問題が解決しました。

「いいね!」 2

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.