Come posso ottenere external_id dall'oggetto utente?

Quando utilizzo l’API per ottenere l’oggetto utente di Discourse, funziona correttamente, ma non vedo incluso l’external_id. Se ho un ID utente o un nome utente di Discourse, come posso recuperare l’external_id da questi?

http://localhost:3000/admin/users/1/blake.erickson.json

Conterrà le informazioni SSO:

Aha - stavo chiamando /users/blake.erickson.json (senza /admin), che restituisce anch’esso un oggetto utente, ma senza single_sign_on_record.

Ehi, perché l’endpoint /users/ accetta (solo?) un nome utente, mentre se vuoi ottenere un utente tramite il suo Discourse ID, devi usare /admin/users/:id.json? Sono solo stranezze del design dell’API?

Un’altra stranezza: se recupero un utente tramite il suo external_id, chiamando /users/by-external/:id.json, non ottengo il single_sign_on_record.

Quindi l’API ha alcune stranezze… a volte un oggetto utente contiene le proprietà single_sign_on_record, a volte no :wink:

Per progettazione, l’endpoint admin restituirà più dati rispetto all’endpoint non admin. Sì, entrambi recuperano record “utente”, ma sarebbe estremamente negativo se l’endpoint /user/..., accessibile dagli utenti regolari, restituisse gli stessi dati di /admin/user/....

Aha, non sapevo che l’endpoint /user fosse accessibile agli utenti individuali. Avevo dimenticato che esistano le chiavi API per gli utenti.

Continuo a essere confuso dalle incongruenze. Al momento, se voglio ottenere single_sign_on_record, devo conoscere l’ID utente di Discourse (/admin/users/:username.json non funziona)… ma la maggior parte delle altre chiamate API sembra richiedere il nome utente (come /users/:username.json).

E poi ci sono endpoint API separati che sono molto simili e sembrano quasi identici, ma restituiscono risultati diversi; ad esempio, /admin/users mi fornisce i dati single_sign_on_record per l’utente, mentre chiamando semplicemente /users/ non li ottengo.

Niente di tutto questo è un grosso problema, sto imparando strada facendo… una volta che avrò fatto più progressi, potrei vedere se riesco a modificare un po’ la documentazione e rendere alcune di queste cose più chiare.

La distinzione qui deriva dal fatto che gli endpoint restituiscono i dati necessari per visualizzare le pagine nell’interfaccia utente. Dai un’occhiata qui:

Certo, lo capisco perfettamente—e ho usato quel trucco per monitorare tutte quelle richieste XHR. Tutto ok. È solo… incoerente. :wink: Ma sono infinitamente grato che Discourse abbia un’API così potente!