'/admin/users/{id}/log_out.json' が機能していません

ログアウトのサンプルコードを作成しようとしています。

私のサイトのDNSは「aaa.com」で、ユーザーIDは「1」です。
URLを作成して、次のようにリクエストを送信しました。

  • post AAA Sorry Page
    また、api-key、api-Usernameとともにヘッダーを送信しました。
    しかし、「Oops! That page doesn’t exist or is private.」という応答を受け取りました。

「CURL」で試してみましたが、次のような結果になりました。しかし、同じ結果になりました。(Oops! That page doesn’t exist or is private~~~ )

curl -X POST " AAA Sorry Page "
-H “Content-Type: multipart/form-data;”
-H “Api-Key: secretStringTemp”
-H “Api-Username: system”
-F “id=1” \

何が間違っているのか教えていただけますか?

こんにちは。
私も同じ問題が発生しています。何か解決しましたか?
よろしくお願いします。

「いいね!」 1

API経由でユーザーをログアウトさせることがまだ可能です。使用したcurlコマンドは以下のとおりです。

curl -i -sS -X POST "http://localhost:4200/admin/users/1/log_out.json"  \
-H "Content-Type: multipart/form-data"  \
-H "Api-Key: 64b901d2357526d1b6e8c439fd0570f9c585073e6160ae18cc82b7ac358d4893"  \
-H "Api-Username: blake.erickson" 

HTTP/1.1 200 OK

{"success":"OK"}

それでも問題が解決しない場合は、APIリクエストに関する詳細情報を提供していただけますか?

「いいね!」 1

お手上げです!

API エンドポイント /admin/users/{USER_ID}/log_out.json を使用してユーザーをログアウトできません。

以下の方法で、Discourse の USER_ID を正常に取得できています。/u/by-external/${user.id}.json

他の API エンドポイントにアクセスしてデータを取得することもできているので、API キーやリクエストの仕組みには満足しています。

しかし、POST リクエストを送信しようとすると…

await axios.post(`${process.env.FORUM_URL}/admin/users/${UserID}/log_out.json`,{
  headers: {
    'Api-Key': process.env.DISCOURSE_API_KEY,
    'Api-Username': process.env.DISCOURSE_API_USERNAME,
  },
});

…ステータス 404 と以下の返却オブジェクトが表示されます。

{
  errors: [ 'The requested URL or resource could not be found.' ],
  error_type: 'not_found'
}

SSO はあまり問題なく実装できました。ログアウトが機能しない理由について、何か洞察があれば幸いです。

よろしくお願いします。

一見問題なさそうですね :thinking:UserID には適切な値が入っていますか?

はい、テストケースでは1です(/u/by-external/${user.id}.jsonへの呼び出しから取得)。値をハードコーディングして確認しましたが、結果は同じでした。

他のトピックからの投稿をここに移動しました。議論をまとめます。:+1:

少し同期がずれていたらごめんなさい。:slight_smile:

「いいね!」 3

無効なユーザーIDを使用すると、404エラーメッセージを再現できます。最初にIDでユーザーを取得できるか確認していただけますか?

curl -i -sSL -X GET "http://localhost:4200/admin/users/1.json" \
-H "Api-Key: 64b901d2357526d1b6e8c439fd0570f9c585073e6160ae18cc82b7ac358d4893"  \
-H "Api-Username: blake.erickson"

HTTP/1.1 200 OK

{
  "id": 1,
  "username": "blake.erickson",
...
「いいね!」 1

はい、Discourse から有効な user_id を取得していることを確認しました。この場合、1 です…

{
  "id":1,
  "username":"Sean",
...
}

興味深いことに、ユーザー ID 1 に対して log_out エンドポイントに cURL リクエストを送信すると…

curl -i -sS -X POST https://community.site.com/admin/users/1/log_out.json
-H "Content-Type: multipart/form-data" 
-H "Api-Key: my-api-key" 
-H "Api-Username: Sean" 

…200 の応答が得られます。これは、ユーザー 1 (私) がフォーラムからログアウトされるはずであることを示唆していますが、確認すると実際にはログアウトされていません。これが問題 1 です。

2 番目の問題は、同じリクエストをアプリのバックエンドから axios を使用して送信すると (上記で詳述)、404 が発生することです。非常に奇妙です。

編集:
問題 1 は問題ではありません。cURL リクエストは正常に私をログアウトさせています。axios POST リクエストが 404 を返す理由を現在調査中です。

「いいね!」 1

謎が解けました :roll_eyes:

axiosリクエストのフォーマットが正しくなかったことが判明しました!POSTリクエストでボディを送信していないので、リクエストと一緒に空のオブジェクトを渡すべきでした。

curlリクエストに関するアドバイス、ありがとうございました @blake。それが最終的に解決の糸口となりました。 :+1:

「いいね!」 3

Sean様

log_out.jsonのコードを共有していただけますでしょうか。同様のリクエストに取り組んでいます。

フォーラムからログアウトするために POST API ‘admin/users/{user_id}/log_out.json’ を試しましたが、「おっと!そのページは存在しないか、プライベートです。」というエラーが返ってきました。
ヘッダーに api_key と api-username を指定しました。同じような問題に直面した方はいらっしゃいますか?

そのエンドポイントには管理者APIキーを使用する必要がありますか?

「いいね!」 1

APIを使用して /admin/users/1/log_out.json にPOSTリクエストを送信することで、正常にログアウトできました。

ボディは空で、ヘッダーには管理者Api-Usernameと、グローバルスコープまたはログアウト機能がチェックされたグラニュラースコープを持つApi-Keyを含めます。

「いいね!」 1

はい、管理APIキーを使用しました

API呼び出しは、どのソフトウェアまたはプログラミング言語で行いましたか?コードをここにコピー&ペーストしていただけますか?