Ottieni indirizzo e-mail per un utente tramite API

È possibile ottenere l’indirizzo e-mail corrente di un utente tramite l’API?

Il nostro caso d’uso è il seguente:

Permettiamo agli utenti di gestire le loro informazioni su Discourse tramite il nostro sito web. In generale, Discourse viene utilizzato solo come mailing list e quasi tutti gli utenti non visitano mai il sito effettivo di Discourse. Vorrei poter mostrare all’utente l’indirizzo e-mail corrente utilizzato da Discourse, in modo che possa verificare se deve essere modificato.

Riesco a farlo per tutti gli altri campi tranne che per l’e-mail.

In passato esisteva un endpoint API users/{username}/emails, ma sembra che non sia più disponibile.

Hi,

GET /users/:username.json

will display the email in two cases:

  • the user id of the API KEY holder is the same than the user id related to the requested username
  • the API KEY holder is staff and the requested user is staged

Read more about this in code:

AFAIK this codepath has not changed recently.

3 Mi Piace

Yeah, but that doesn’t help me. All of the users are already active and the user API key is not going to match.

This request does work for me:

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

But, does it work if the URL is http://example.com/users/paulapostolos/emails.json ?

Yes it should work for yourself and other users as long as this is true:

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

Note that doing so will trigger a staff action log.

4 Mi Piace

That worked…I had some old code that used to work (version 1.4 ish) that had the request as a PUT and without the .json at the end. I modified it to a GET and changed the URL and now it works.

Thanks for the help!

3 Mi Piace