API list_users с ключом Staff API не возвращает email

Продолжение обсуждения из Получение email пользователя: emails.json, похоже, не работает:

В документации API для списка пользователей указано, что в ответе JSON возвращается поле email. В обсуждении выше отмечается:

При использовании API-ключа сотрудника при вызове client.list_users('staff') я получаю список пользователей, но поле email отображается только для моей записи. Ожидается, что поле email будет возвращено для всех пользователей в списке. Иначе мне приходится делать отдельный запрос API для каждого пользователя, чтобы получить его email.

Поскольку у меня есть CSV-файл с именами и email-адресами, я могу искать пользователей только по их email, чтобы манипулировать записями или создавать новых пользователей из входящего списка. Это делает задачу немного утомительной и подверженной ошибкам.

В целом я считаю, что email-адреса должны быть доступны либо в открытом виде для сотрудников, либо в виде хеша SHA256, возможно, с солью, которая помешает произвольным злоумышленникам узнать, используется ли данный email на этом сайте — хотя у них есть и другие способы это сделать, например, через напоминание пароля или регистрацию. Использование криптографического хеша email позволило бы проверять его наличие без раскрытия самого адреса.

В любом случае, я считаю, что отсутствие значения email в списке пользователей при использовании API-ключа сотрудника — это ошибка, которую следует исправить.

Тем временем, получив список пользователей, вам нужно пройтись по нему и вызвать /u/#{username}/emails.json, чтобы добавить недостающие email-адреса в список.


Вот пример кода:

module DiscourseApi::API::Users
  def user_email(username)
    response = get("/u/#{username}/emails.json")
    response.body['email']
  end
end

staff = client.list_users('staff')
staff.each_with_index do |u, i|
  next unless u['email'].nil?
  staff[i]['email'] = client.user_email(u['username'])
end

staff.sample['email'].nil? # => false

Попробуйте использовать client.list_users('staff', show_emails: true).

Обратите внимание, что доступ к этой информации будет отображаться в журнале персонала в панели администратора.