Elimina avatar utente tramite API

Ciao!

Abbiamo un’applicazione del forum Discourse collegata alla nostra app tramite SSO. Gli avatar degli utenti vengono aggiornati direttamente tramite questo meccanismo. Tuttavia, le nostre foto sono soggette a moderazione, quindi dobbiamo cancellare gli avatar degli utenti sul lato dell’applicazione Discourse.

È possibile farlo tramite REST API o mediante miglioramenti al meccanismo SSO? Non riesco a trovare questa informazione nella documentazione.

Grazie!

Dovresti essere in grado di chiamare la rotta sync_sso per rieseguire la sincronizzazione dell’avatar dell’utente, ma puoi anche inviare una richiesta PUT a http://localhost:3000/u/<username>/preferences/avatar/pick con un upload_id vuoto

per eliminare l’avatar corrente dell’utente e assegnargli un avatar a lettera.

@blake Errore nell’invio di questa richiesta. Ho utilizzato una richiesta POST.
{
“failed”: “FAILED”
}

Hai provato con una PUT come consigliato?

@pfaffman scusa, ho usato put

Dovrai utilizzare l’endpoint sync_sso se hai abilitato sso overrides avatar.

Utilizziamo un endpoint SSO, ma aggiorna l’avatar dell’utente solo al momento dell’accesso. Nel nostro caso, è necessario aggiornarlo manualmente.

Sì, va benissimo. Puoi inviare manualmente una richiesta POST all’endpoint sync_sso in qualsiasi momento.

Potresti gentilmente allegare il link alla documentazione API per quell’endpoint?

Ecco del codice Ruby che puoi utilizzare, che sfrutta il gem discourse_api, così da poterlo prendere come riferimento. L’endpoint sync_sso è un po’ diverso dagli altri endpoint perché è necessario inviargli un payload firmato.

client = DiscourseApi::Client.new('host')
client.api_key = 'api_key'
client.api_username = 'api_username'
puts client.sync_sso(
  sso_secret: 'abcdefghij',
  username: '24db27218ed09205a5a0',
  name: '24db27218ed09205a5a0',
  email: '24db27218ed09205a5a076983bf241ab@example.com',
  external_id: '684',
  avatar_url: 'https://d3bpeqsaub0i6y.cloudfront.net/user_avatar/meta.discourse.org/codinghorror/240/110067_2.png',
)

Ho capito bene che possiamo inviare POST /admin/users/sync_sso?api_key=...&api_username=...&sso=...&sig=...?
I parametri ‘sso’ e ‘sig’ sono simili a quelli del flusso di autorizzazione SSO?

Ho provato a eseguire la richiesta come spiegato sopra POST /admin/users/sync_sso?api_key=...&api_username=...&sso=...&sig=... e ha risposto con 200 restituendo il mio utente, ma l’avatar dell’utente non è stato aggiornato e non ci sono stati eventi nei log. Cosa sto sbagliando?

Dovresti includere api_key e api_username nell’intestazione HTTP, poiché l’utilizzo nei parametri di query è deprecato.

Credo che ci sia una protezione nel codice che impedisce la cancellazione accidentale di un avatar se il campo viene omesso o è vuoto. Probabilmente dovrai fornire un URL a un avatar predefinito per sostituire quello esistente.

Ho sostituito le credenziali API con le intestazioni.
La sincronizzazione SSO non ha aggiornato l’avatar dell’utente con quello fornito. Sebbene il lavoro Sidekiq in quella chiamata fosse completato e non ci fossero log di errori o avvisi.

Puoi attivare i log dettagliati del SSO nelle impostazioni del sito per verificare se appare qualcosa lì.

L’avatar_url che stai fornendo è pubblico? Il tuo sito Discourse dovrà essere in grado di accedervi.