Get user email, emails.json seems not working에서 이어서 논의합니다:
list_users의 API 문서에는 결과 JSON 응답에 email 필드가 제공된다고 명시되어 있습니다. 위의 논의에서는 다음과 같이 언급하고 있습니다:
스태프 API 키를 사용하여 client.list_users('staff')를 호출하면 사용자 목록을 받지만, 이메일 필드는 제 항목에서만 표시됩니다. 목록 내 모든 사용자의 이메일 필드가 반환될 것으로 예상했습니다. 그렇지 않으면 각 사용자의 이메일을 가져오기 위해 API를 다시 호출해야 합니다.
이름과 이메일이 포함된 CSV 파일이 있으므로, 수신된 목록에서 레코드를 조작하거나 새 사용자를 생성하기 위해 이메일을 통해 사용자를 조회할 수밖에 없습니다. 이로 인해 작업이 다소 번거롭고 오류가 발생하기 쉽습니다.
일반적으로 이메일은 스태프에게는 평문으로, 아니면 임의의 공격자가 해당 사이트에서 특정 이메일이 사용 중인지 발견하는 것을 방지할 수 있는 소금(salt)이 추가된 SHA256 해시로 제공되어야 한다고 생각합니다. 물론 비밀번호 재설정이나 가입 등을 통해 이를 확인하는 다른 방법도 있지만요. 이메일의 암호화 해시를 사용하면 이메일을 공개하지 않고도 그 존재 여부를 확인할 수 있습니다.
어쨌든, 스태프 API 키를 사용해도 사용자 목록에 이메일 값이 없는 것은 버그라고 생각하며 수정되어야 합니다.
그동안, 사용자 목록을 얻은 후에는 이를 반복하며 /u/#{username}/emails.json을 호출하여 목록에 누락된 이메일을 주입해야 합니다.
다음은 관련 코드입니다:
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