Wordpress SSO e accesso Patreon

Ciao di nuovo! Avevo una domanda. Un mio cliente vuole spostare gradualmente la sua membership da Patreon a WordPress (tramite Woocommerce Memberships). So che è possibile, basandomi su altri post nei forum.

Tuttavia, la mia domanda è: se abilitiamo l’SSO con WordPress come provider, è WordPress l’unico modo per accedere ai forum? L’abilitazione dell’SSO con WordPress impedirebbe agli utenti di Patreon di accedere tramite i loro account Patreon? O è possibile farli funzionare entrambi contemporaneamente?

Scusa se è confuso o se questo non è il posto giusto per fare questa domanda.

Grazie in anticipo!

Sì, la prima S in SSO sta per Single. WordPress diventa l’autorità per tutte le autenticazioni.

Detto questo, se Patreon fornisce gli indirizzi email degli utenti, questi possono registrarsi su WordPress per accedere nuovamente ai propri account, purché utilizzino lo stesso indirizzo.

Potresti anche consentire agli utenti di accedere al tuo sito WordPress tramite Patreon con Patreon WordPress – WordPress plugin | WordPress.org. Non l’ho testato, ma dovrebbe essere possibile permettere agli utenti di accedere a WordPress tramite Patreon mantenendo comunque l’accesso SSO tra WordPress e Discourse. Se provi e incontri problemi nel farlo funzionare, faccelo sapere.

Ciao! Ho testato questa configurazione e funziona sostanzialmente! :slight_smile:
L’unico problema che ho riscontrato è che non reindirizza a Discourse dopo un accesso riuscito: restituisce l’utente a WordPress. L’utente deve andare manualmente su Discourse e poi premere nuovamente il pulsante “Accedi” per registrarsi. Mi chiedo se sia possibile risolvere in qualche modo.

Ho registrato un video per mostrare come funziona -

Grazie per averlo provato. Sembra che i parametri SSO necessari per eseguire l’accesso dell’utente a Discourse vengano rimossi durante il processo di accesso a Patreon. Se è così, probabilmente non c’è nulla che si possa fare per risolvere il problema.

Mi chiedo, si può risolvere modificando il plugin Wordpress-Patreon? Ne vale la pena contattare i suoi autori? :slight_smile:

Se la causa del problema è quella che penso io, modificare il plugin WordPress Patreon potrebbe risolvere la questione. Secondo me, il problema è che il plugin WordPress Patreon rimuove i parametri di query sso e sig inviati con la richiesta di accesso di Patreon. Potrebbe valere la pena contattare gli sviluppatori di quel plugin per segnalare il problema.

Prima di farlo, dovresti verificare che cliccando sul pulsante Accedi su Discourse, per un utente che non è attualmente connesso a WordPress, si venga reindirizzati alla pagina di accesso di WordPress. Se l’utente seleziona quindi l’opzione di accesso tramite Patreon, viene connesso a WordPress ma non a Discourse. Tieni presente che, se il tuo sito Discourse è impostato come privato, quanto sopra dovrebbe accadere se un utente accede direttamente al tuo sito Discourse. In quel caso, l’utente non vedrà alcun pulsante Accedi su Discourse.

Ciao! Ho inviato un rapporto agli sviluppatori del plugin Patreon: Redirecting not working when using together with Discourse SSO - Wordpress Plugin - Patreon Developers

Sì, posso confermare quanto segue:

  • cliccando sul pulsante Accedi su Discourse, per un utente che non è attualmente collegato a WordPress, l’utente viene reindirizzato alla pagina di accesso di WordPress - :white_check_mark:

  • Se l’utente seleziona quindi l’opzione di accesso tramite Patreon, viene collegato a WordPress - :white_check_mark:

  • ma non viene collegato a Discourse - :white_check_mark: - nel video sopra al minuto 0:32 si vede che l’utente non è collegato.

Ok, ho trovato una soluzione alternativa che ‘risolve’ il problema con il login su Patreon. Di seguito trovate le istruzioni. :slight_smile:

Avrete bisogno di:

  • Un qualsiasi plugin che fornisca uno shortcode per visualizzare il modulo di login (nel mio sito ho installato WooCommerce, quindi ho usato lo shortcode [woocommerce_my_account], che fa esattamente questo per gli utenti non loggati).
  • Il plugin Members, che fornisce gli shortcode [members_logged_in] e [members_not_logged_in] per mostrare/nascondere contenuti in base allo stato di accesso dell’utente. Potete usare qualsiasi altro plugin con funzionalità simili.
  • Il plugin Shortcode Redirect.

L’idea è creare una pagina speciale che mostri un modulo di login (e il pulsante di login Patreon) solo per gli utenti non loggati. Se l’utente è già loggato, la pagina deve reindirizzare all’URL https://community.morevnaproject.org/session/sso?return_path=%2F.
(Ovviamente, dovrete sostituire “community.morevnaproject.org” con il vostro dominio).

La mia pagina di login speciale ha il seguente contenuto:

[members_not_logged_in]
   [woocommerce_my_account]
   [patreon_login_button]
[/members_not_logged_in]
[members_logged_in]
   [redirect url='https://community.morevnaproject.org/session/sso?return_path=%2F' sec='0']
[/members_logged_in]

(potete vederla in azione qui - Log In / Register — Morevna Project)

A questo punto, dovete solo configurare il plugin WP-Discourse per utilizzare quella pagina per l’SSO -

Quando l’utente clicca sul pulsante “Accedi” in Discourse, viene reindirizzato alla mia pagina WordPress speciale. Poiché l’utente non è loggato, viene mostrato il modulo di login. Se l’utente clicca sul pulsante “Accedi con Patreon”, viene reindirizzato a Patreon per l’autorizzazione. Dopo un’autorizzazione riuscita, viene reindirizzato nuovamente alla mia pagina speciale. Dato che ora l’utente è loggato, viene attivato lo shortcode “redirect”:

[redirect url='https://community.morevnaproject.org/session/sso?return_path=%2F' sec='0']

…e l’utente viene reindirizzato con successo ai forum di Discourse.

La parte session/sso?return_path=%2F alla fine dell’URL è necessaria; altrimenti Discourse non riconoscerà l’utente come loggato dopo il reindirizzamento.

È tutto! Spero che questo possa aiutare altri utenti che desiderano implementare l’SSO con WordPress e il login Patreon sul proprio sito. :slight_smile:

Ottimo lavoro nel risolverlo :+1:

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.

+1 sì, c’è un rischio! :slight_smile:

Wow, grazie mille per le istruzioni dettagliate! Quindi, ha senso modificare lo shortcode [patreon_login_button] per accettare il parametro final_redirect_uri e aprire una PR sul loro repository GitHub. Grazie ancora per aver dedicato del tempo a spiegare!