Continuiamo la discussione da Recupero email utente, emails.json sembra non funzionare:
La documentazione API per list_users afferma che la risposta JSON risultante include il campo email. La discussione sopra citata menziona quanto segue:
Utilizzando una chiave API dello staff, quando chiamo client.list_users('staff'), ricevo un elenco di utenti, ma il campo email viene mostrato solo per la mia voce. Mi aspetterei che il campo email venga restituito per tutti gli utenti nell’elenco. Altrimenti devo chiamare di nuovo l’API per ogni utente per recuperare l’email.
Poiché ho un file CSV con nomi ed email, posso cercare gli utenti solo tramite le loro email per modificare i record o creare nuovi utenti dalla lista in arrivo. Questo rende il lavoro un po’ laborioso e soggetto a errori.
In generale, penso che le email dovrebbero essere disponibili in chiaro per lo staff, oppure come hash SHA256, magari con un sale che impedisca a potenziali attaccanti di scoprire se un’email è utilizzata su questo sito — anche se esistono altri modi per farlo, ad esempio tramite il recupero della password o la registrazione. Utilizzare un hash crittografico dell’email permetterebbe di verificarne la presenza senza rivelarla.
Comunque, ritengo che l’assenza del valore email nell’elenco utenti quando si utilizza una chiave API dello staff sia un bug e dovrebbe essere corretto.
Nel frattempo, una volta ottenuto l’elenco degli utenti, è necessario iterarlo e chiamare /u/#{username}/emails.json per inserire l’email mancante nell’elenco.
Ecco un esempio di codice:
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