Come posso collegarmi al profilo di un utente tramite il suo ID utente?

Ho una tabella members nel database della mia applicazione, dove memorizzo informazioni specifiche dell’applicazione per un sottoinsieme di membri. Una delle colonne è discourse_user_id. Vorrei rendere un link al profilo Discourse del membro. È possibile farlo utilizzando solo il loro ID utente?

Non sto memorizzando discourse_user_name perché l’utente può cambiarlo e, in tal caso, dovrei preoccuparmi di mantenerli in sincronizzazione.

L’unico modo che mi viene in mente è effettuare una richiesta API a /admin/users/<user-id>.json per ottenere il loro nome utente, ma ciò comporterebbe un numero elevato di richieste da eseguire su una pagina di indice, dove sto elencando i membri con link ai loro profili.

L’unica altra cosa che mi viene in mente è creare un plugin per aggiungere una rotta, anche se sembra un dispendio di energie eccessivo per qualcosa che mi aspetto non sia la prima persona a chiedere, quindi volevo verificare se esiste già un’altra soluzione?

Un’idea è inserire un ID esterno nel record dell’utente e poi utilizzare /by-external/:external_id. Un’altra opzione è utilizzare un webhook per notificare il tuo database esterno in caso di modifica del nome utente. Un’altra ancora è semplicemente disabilitare la modifica dei nomi utente. Da una rapida occhiata a discourse/config/routes.rb, non vedo alcuna rotta che utilizzi user_id.

Grazie @pfaffman, è molto utile. Penso che l’uso di un ID esterno sarebbe l’ideale, poiché risolve anche un altro problema—collegare nella direzione inversa.

Tuttavia, esplorando la documentazione dell’API e un client REST, non vedo come aggiornare quel campo. Posso utilizzarlo senza abilitare SSO? (E, anche se abilitassi SSO, sarei in grado di aggiornarlo programmaticamente?)

Scusa, non lo so al momento. Dovrei dare un’occhiata al codice sorgente.

Non c’è motivo di aggiornare la chiave esterna; le chiavi non dovrebbero cambiare.

Un’altra cosa che potresti fare è far sì che entrambi i sistemi presuppongano che l’indirizzo email sia lo stesso.

Penso che l’SSO sia ciò che vorrai utilizzare.

Puoi provare questo:

https://SERVER/community/admin/users/list/active.json?filter=email%40hostname.com&show_emails=true

È necessario passare la chiave API nelle intestazioni, come documentato altrove.

Ho creato un plugin per abilitare questa funzionalità:

/user-by-id/123/summary reindirizza a /u/janedoe/summary e così via.

Sono ancora sorpreso di aver dovuto farlo, ma almeno funziona!