Continuando la discusión desde Obtener correo electrónico del usuario, emails.json parece no funcionar:
La documentación de la API para list_users indica que la respuesta JSON resultante proporciona el campo email. La discusión anterior menciona lo siguiente:
Utilizando una clave de API de personal, cuando llamo a client.list_users('staff'), recibo una lista de usuarios, pero solo mi entrada muestra el campo de correo electrónico. Esperaría que el campo de correo electrónico se devolviera para todos los usuarios en la lista. De lo contrario, tengo que llamar a la API nuevamente por cada usuario para recuperar el correo electrónico.
Dado que tengo un archivo CSV con nombres y correos electrónicos, solo puedo buscar usuarios a través de sus correos electrónicos para manipular los registros o crear nuevos usuarios a partir de la lista entrante. Esto hace que el trabajo sea un poco tedioso y propenso a errores.
En general, creo que los correos electrónicos deberían estar disponibles en texto claro para el personal, o como un hash SHA256, quizás con una sal que impida que atacantes arbitrarios descubran si un correo electrónico se utiliza en este sitio, aunque tienen otras formas de hacerlo, por ejemplo, recordatorios de contraseña o registro. Usar un hash criptográfico del correo electrónico permitiría verificar su presencia sin divulgarlo.
De todos modos, creo que no tener el valor del correo electrónico en la lista de usuarios al usar una clave de API de personal es un error y debería corregirse.
Mientras tanto, una vez que tengas la lista de usuarios, debes iterar sobre ella y llamar a /u/#{username}/emails.json para inyectar el correo electrónico faltante en la lista.
Aquí tienes algo de código:
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