Penso che la tua domanda principale riguardi il campo external_id. Devi impostare un campo external_id nel payload di DiscourseConnect. Il valore del campo dovrebbe essere una stringa associata all’utente che non cambierà mai. Presumo che la tua applicazione abbia una tabella users. La chiave primaria per la voce di un utente in quella tabella sarebbe un buon valore da usare per il campo external_id.
Se un utente ha creato un account su Discourse prima che tu aggiungessi l’autenticazione DiscourseConnect dal tuo sito web, la prima volta che accede a Discourse tramite DiscourseConnect, Discourse tenterà di trovare l’utente in base all’indirizzo email presente nel payload di DiscourseConnect. Dopo aver trovato l’utente, verrà aggiunto un record al database di Discourse contenente l’external_id dal payload di DiscourseConnect. La prossima volta che l’utente accede, verrà trovato tramite l’external_id invece che tramite l’indirizzo email. (Nota che questo non funziona se imposti il parametro require_activation nel payload di DiscourseConnect su true.)
Discourse ha buoni fallback per la maggior parte dei casi limite. Ci sono problemi relativi agli utenti che hanno più account e indirizzi email che possono causare errori. Alcuni dettagli su come gestire questi casi sono qui: Debug e risoluzione dei problemi comuni di DiscourseConnect.