Ottimo lavoro nel risolverlo ![]()
Non voglio sminuire il lavoro che hai svolto, ma la mia prima impressione è che dovresti prendere in considerazione l’uso di un servizio di autenticazione esterno (come okta.com o auth0.com) in questo momento. Ogni volta che raggiungi il punto di collegare tre servizi diversi (ad esempio Patreon, WordPress e Discourse) per ottenere un’unica autenticazione in un’unica soluzione, è un segnale che dovresti valutare una soluzione dedicata all’autenticazione. Che tu riesca o meno a realizzarlo in qualche modo, c’è un rischio significativo a lungo termine che la tua soluzione si guasti o non funzioni in tutti i casi.
Se desideri comunque procedere in questa direzione, ho alcuni suggerimenti, ma ti avverto che la questione diventerà un po’ tecnica. Li aggiungo qui anche nel caso in cui qualcun altro si imbatta in questo e voglia approfondire.
Ho dato un’occhiata rapida al codice del plugin Patreon per WordPress e sembra che il loro flusso OAuth accetti una chiave/coppia di valori final_redirect_uri nel parametro state, il che ti permetterebbe di passare direttamente dall’autenticazione Patreon all’SSO di Discourse, eliminando la necessità dei plugin Members e Redirect menzionati sopra e evitando eventuali problemi che potrebbero sorgere con quell’approccio.
Molti servizi di autenticazione dispongono di una versione del parametro final_redirect_uri, ovvero un parametro che ti consente di modificare la destinazione a cui viene inviato l’utente dopo l’autenticazione. Se stai leggendo questo perché stai cercando di risolvere lo stesso problema, ma con un servizio diverso (cioè diverso da Patreon), e hai anche deciso che il mio avvertimento contro il collegamento di tre servizi diversi non si applica, allora è lì che dovresti cercare.
Ciò significa che vorresti che lo shortcode che genera il pulsante di accesso Patreon accetti final_redirect_uri come argomento, che verrebbe poi passato all’URL di accesso finale utilizzato da Patreon. Guardando il codice del plugin Patreon per WordPress, questa è una possibilità fattibile. Per darti un’idea, la funzione pertinente che genera l’URL Patreon appare così:
Patreon_Frontend::patreonMakeLoginLink(false, array( 'final_redirect_uri' => # ) );
In sostanza, il codice è già parzialmente configurato per gestire un final_redirect_uri personalizzato. Posso capire perché gli sviluppatori del plugin Patreon per WordPress potrebbero non volerlo aggiungere, ma se ti senti abbastanza sicuro nel descrivere quanto ho esposto qui, potrebbe valere la pena aprire una issue sul loro repository GitHub. In alternativa, puoi utilizzare la funzione che ho citato sopra per generare un link da solo e creare il tuo pulsante (o assumere uno sviluppatore WordPress per farlo).
Solo una piccola nota sulla costruzione dell’URL SSO: è più chiaro utilizzare
https://discourse.example.com/session/sso?return_path=/
invece di
https://discourse.example.com/session/sso?return_path=%2F
L’ultima parte, return_path, è il percorso a cui l’utente viene inviato su Discourse dopo l’accesso. Se è /, verrà reindirizzato alla homepage del forum. Per ulteriori informazioni sulla costruzione dell’URL SSO, consulta WP Discourse Tips and Tricks.