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.
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
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.
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.