Come gestire l'SSO di Discourse quando il sito di autenticazione permette agli utenti di cambiare l'email?

Utilizziamo un flusso SSO di Discourse che abbiamo implementato seguendo questa guida: Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso)

Finora ha funzionato bene per noi. Tuttavia, ora vogliamo permettere agli utenti del nostro sistema di modificare il proprio indirizzo e-mail e questo sembra causare problemi.

Quando modifico l’e-mail del mio utente nel nostro sistema, l’SSO verso Discourse smette di funzionare.

Errore di accesso

C’è un problema con il tuo account. Contatta l’amministratore del sito.

Immagino che Discourse riceva un payload con un’e-mail e un nome utente che non corrispondono e non sappia come gestire la situazione.

Qual è il modo migliore per gestire questo caso?

L’idea migliore che mi è venuta in mente è utilizzare l’API di Discourse per modificare l’e-mail dell’utente in Discourse, allineandola a quella del nostro sistema, prima di avviare l’SSO.

Ma non so se sia possibile. Di seguito il mio tentativo fallito.

Ecco la mia richiesta:

https://forum-stage.{domain}.com/users/{username}/preferences/email

Intestazioni:
Content-Type: application/x-www-form-urlencoded
Accept: application/json

Corpo (come x-www-form-urlencoded in Postman):
email: testemail@testdomain.com
api_key: 75a...77d
api_username: system

Ecco la risposta che ho ricevuto:

{
    "errors": [
        "Non sei autorizzato a visualizzare la risorsa richiesta."
    ],
    "error_type": "invalid_access"
}

Anche io sto riscontrando questo problema - sei riuscito a trovare un modo per aggirarlo?

Non dovrebbe essere così, ci basiamo principalmente sull’ID SSO.

Puoi utilizzare l’endpoint sync sso per sincronizzare le email sul lato Discourse se desideri farlo in modo proattivo, ma la modifica delle email nel tuo sistema dovrebbe funzionare sempre.

L’unica eccezione è:

Discourse pensa che l’ID SSO sia 5 e l’email sia bob@jane.com

Accedi con l’ID SSO 6 e l’email è bob@jane.com

Questa situazione non è risolvibile automaticamente, quindi dovrai intervenire manualmente (sincronizza prima l’ID SSO 6).