APIを介してユーザーのメールアドレスを取得する

API を通じてユーザーの現在のメールアドレスを取得する方法はありますか?

私たちのユースケースは以下の通りです。

当社のウェブサイトを通じて、ユーザーが Discourse の情報を管理できるようにしています。一般的に、Discourse はメーリングリストとしてのみ使用され、ほとんどのユーザーは実際の Discourse サイトを訪れることはありません。ユーザーに Discourse が現在使用しているメールアドレスを表示し、変更が必要かどうかを確認できるようにしたいと考えています。

メールアドレス以外のすべての項目については、この処理を実行できています。

以前は users/{username}/emails という API エンドポイントが存在していましたが、現在は利用できないようです。

こんにちは、

GET /users/:username.json

は、以下の 2 つのケースでメールアドレスを表示します。

  • API キー保有者のユーザー ID が、リクエストされたユーザー名に関連するユーザー ID と一致する場合
  • API キー保有者がスタッフであり、リクエストされたユーザーがステージング環境にいる場合

コードの詳細については、こちらをご覧ください:

私の知る限り、このコードパスは最近変更されていません。

はい、でもそれは私の役に立ちません。すべてのユーザーはすでにアクティブで、ユーザー API キーが一致しません。

このリクエストは私の環境で動作します:

curl "http://example.com/users/joffreyjaffeux/emails.json" \
     -H 'Api-Username: joffreyjaffeux' \
     -H 'Api-Key: xxx' \
     -H 'Content-Type: application/json; charset=utf-8' \

ただし、URL が http://example.com/users/paulapostolos/emails.json の場合でも機能しますか?

はい、以下の条件が満たされていれば、自分自身および他のユーザーに対して機能します。

  def can_check_emails?(user)
    is_admin? || (is_staff? && SiteSetting.moderators_view_emails)
  end

なお、これを実行するとスタッフアクションログが記録されます。

それ、うまくいきました…以前は動いていた古いコード(バージョン1.4頃)には、PUTリクエストで末尾に.jsonをつけていなかったものがありました。それをGETに変更し、URLも修正したところ、動くようになりました。

お手伝いいただき、ありがとうございます!