Продолжение обсуждения из Получение 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