APIで投稿をロックできません

アプリケーションからDiscourseにAPIコールをいくつか行い、投稿を変更しています。

最初のコールで投稿を編集します。これはうまく機能します。次のコールで投稿をロックしようとします。

JavaScriptからの投稿ロックコールは次のようになります。

fetch(`https://forum.hollowverse.com/posts/1817/locked.json`, {
  method: 'PUT',
  headers: {
    'Api-Key': process.env.DISCOURSE_SYSTEM_PRIVILEGE_SECRET,
    'content-type': 'application/json',
    'Api-Username': 'hollowbot',
  },
  body: JSON.stringify({locked: true}),
});

このコールを実行すると、Discourseは{locked: false}で応答します。

手動で投稿をロックし、Discourseクライアントが行うAPIコールを調べたところ、アプリケーションから行うコールと非常によく似ていますが、認証方法が異なる可能性があります。

何が起こっているのかわかりません。何かアイデアはありますか?

明らかな問題は見当たりません。How to reverse engineer the Discourse APIに従って取得しましたか?私がコンピューターの前にいれば、そうして手伝うでしょう。

「いいね!」 1

投稿をロックするAPIは、Discourse API Docs でドキュメント化されていますが、私もDiscourseクライアントがどのようにそれを行っているかをリバースエンジニアリングしようとしましたが、私のアプリケーションから行っている方法と非常によく似ています。

「いいね!」 1

コードは次のとおりです。

code

params[:locked] === "true" ? locker.lock : locker.unlock

これは文字列比較を行っているようです。

つまり、"locked": true ではなく "locked": "true" を送信する必要があり、ドキュメントまたはコードを更新してこの動作を反映または変更する必要があるということです。

ブラウザは JSON リクエストを送信せず、Content-Type: application/x-www-form-urlencoded を送信するため、パラメータは文字列として解釈され、ブラウザで機能します。

「いいね!」 2

Richard、ご協力ありがとうございます!

TIL!

ドキュメントの更新をPRすることも検討します。

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