外部IDによるユーザーの取得ができません

こんにちは、

ドキュメントに従って外部 ID でユーザーを取得しようとしています:

https://docs.discourse.org/#tag/Users/paths/~1u~1by-external~1{external_id}.json/get

試したすべてのユーザーに対して「404 見つかりません」というエラーが返されます。同じ URI、API キー、ユーザー名を使用してカテゴリやグループは取得できます。何か解決策はありますか?

よろしくお願いいたします、

マーク・ペムバーン
ブルーオーシャン・アイデアズ

「いいね!」 1

Discourse API のリバースエンジニアリング方法については、こちら をご覧ください。

@pfaffman ご回答の意味がわかりません。回答が含まれていないようです。そのトピックでは、文書化されていないエンドポイントの特定方法について説明しています。今回のエンドポイントは文書化されており、Ember フロントエンドからこの特定のエンドポイントが呼び出されることは決してないため、このようにリバースエンジニアリングできない API 呼び出しは非常に少ないのです。

@mpemburn 動作するはずです。ドキュメントは正しいようです。外部 ID は、SSO が有効な場合に渡されるリモートデータベース内の ID です。コードを共有していただけますか?

「いいね!」 5

おっと。「API ドキュメントが壊れているが、どうすれば……」という問いに対する答えは、私がリンクしたものが最も一般的です。より注意深く見ると、外部 ID に関連する何かが UX を介してアクセスできないことが痛烈に明らかです。マークがあなたの注意深さに恵まれているのは幸運ですね!

理論 #1
ほとんどの場合(常にではありませんが)、外部 ID はデータベース ID であり、数値です。外部 ID が mark89 であることを確信していますか?SingleSignOnRecord.find_by(external_id: 'mark89') はデータベースレコードを返しますか?

理論 #2
ステージングサイトでは SSO が有効になっておらず、これは通常外部 ID とセットで設定されます。外部 ID が存在していることを確信していますか?

待ってください… ヘッダーがクッキーに含まれていますか?それは適切ではありません。以下のようにする必要があります:

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'
「いいね!」 6

ああ、残念ですが、それもうまくいきません。

同じリクエストを WordPress の Discourse プラグインで試してみましたが、これも動作しません。ただし、メールアドレスでユーザーを取得するリクエストは機能します。これは私がこれまでテストに使ってきた Discourse のサンドボックス版に問題があるのではないかと思い、本番環境でも試してみましたが、状況は同じでした。次に何をすべきか分かりませんが、これが機能することを本当に必要としています。

Mark

認証ヘッダーの送信方法が誤っていることに気づく前に私が述べた2つの仮説を確認しましたか?

仮説 #1:
ほとんどの場合(常にではありませんが)、外部 ID はデータベース ID であり、数値です。あなたの外部 ID は本当に mark89 でしょうか?SingleSignOnRecord.find_by(external_id: 'mark89') はデータベースレコードを返しますか?

仮説 #2:
あなたのステージングサイトでは SSO が有効になっておらず、通常これは外部 ID とセットで設定されます。外部 ID が存在していることは確実ですか?

「いいね!」 1

リチャードさん、

はい、サンドボックスには SSO が設定されていませんが、本番環境には設定されています。本番環境のユーザーレコードを確認しましたが、確かに外部 ID が設定されており、実際には数値 ID です。本番環境の認証情報と URI、そして実際の外部 ID を使ってテストしたところ、同じ 404 エラーが返ってきました。

あと、SingleSignOnRecord.find_by(external_id: ‘mark89’) をテストする方法がわかりません。この機能はどこにありますか?

マーク

cd /var/discourse
./launcher enter app
rails c
SingleSignOnRecord.find_by(external_id: 'mark89')
「いいね!」 4