Quando ho inizialmente configurato l’SSO con WordPress, gli utenti andavano all’URL del forum, venivano reindirizzati alla pagina di accesso di WordPress e, dopo il login, venivano reindirizzati nuovamente al forum.
Ma a un certo punto, questa situazione è cambiata e non ho idea di come. Ora, dopo il login su WordPress, l’utente viene reindirizzato alla dashboard di WordPress.
Inoltre, un’altra cosa strana è che quando esito da Discourse, vedo un messaggio “Sei stato disconnesso”, ma quando faccio clic sul pulsante “Aggiorna”, in realtà non vengo disconnesso. Posso ancora pubblicare, rispondere, ecc. A volte devo uscire 2 o 3 volte prima di essere effettivamente disconnesso. Quindi funziona, ma non in modo coerente.
Probabilmente c’è un plugin di WordPress che interferisce con le tue rotte e/o si aggancia alle tue funzioni di login. Disattiva semplicemente metà dei plugin di WordPress e verifica quale metà causa il problema, quindi disattiva metà dei plugin in quel gruppo e così via.
Inizia con i plugin relativi all’autenticazione, alle iscrizioni e al login.
La risposta di Michael è probabilmente corretta. Inoltre, hai installato il plugin WooCommerce sul tuo sito? Se sì, puoi aggiungere del codice al tuo sito per risolvere il problema.
Il problema di disconnessione potrebbe essere correlato al problema di reindirizzamento all’accesso. Se la disattivazione dei plugin non risolve il problema, faccelo sapere.
Il problema di accesso sembra essere un conflitto con il plugin MemberPress. Quindi immagino di dover approfondire una possibile soluzione con loro.
Il problema di disconnessione era causato da un plugin di reindirizzamento. C’era un reindirizzamento alla home page che creava problemi con la disconnessione di Discourse.
Michael – apprezzo davvero il tuo aiuto e i tuoi consigli sui plugin che potrebbero essere i responsabili. Mi ha fatto risparmiare un sacco di tempo perché erano i primi due plugin che ho controllato.
Simon – grazie per avermi parlato del plugin WordPress Health Check. Non ne avevo mai sentito parlare prima, ma lo installerò subito e lo userò per il troubleshooting in futuro.
Esamina le impostazioni del plugin per eventuali reindirizzamenti di accesso che crea. Sembra che reindirizzi gli utenti alla loro pagina del profilo prima che il plugin WP Discourse possa reindirizzarli indietro a Discourse. Se trovi la soluzione, pubblicala qui. Se non la trovi, faccelo sapere. Posso provare a installare MemberPress sul mio sito locale.
Sì, il plugin Health Check è ottimo per il debug di questo tipo di problemi.
Non sono riuscito a risolvere il problema con MemberPress. È sicuramente un conflitto con MemberPress, poiché è l’unico plugin in cui ho impostato un URL di reindirizzamento specifico, ovvero /jump.
Non sono molto sicuro di come procedere. Quando qualcuno accede dal mio sito WordPress, vorrei che venisse reindirizzato a /jump dopo il login. Quindi MemberPress sta facendo il suo lavoro in questo senso.
Tuttavia, quando le persone accedono al mio sito Discourse, ad esempio community.mydomain.com, vengono reindirizzate alla pagina di login di WordPress, ma dopo il login vengono inviate anche a /jump invece di essere reindirizzate al forum.
Sai quali impostazioni hai abilitato su MemberPress per creare il reindirizzamento? Ho installato una versione recente di MemberPress sul mio sito di sviluppo, ma non sono riuscito a riprodurre né il problema di accesso né il problema per cui gli utenti non vengono disconnessi da Discourse.
Il tuo sito WordPress è un’installazione multisito o si tratta di una normale installazione WordPress?
È possibile che il problema che riscontri con gli utenti non disconnessi da Discourse sia dovuto al fatto che il tuo sito Discourse è configurato per richiedere l’accesso per visualizzare i contenuti. In questo caso, aggiornare la pagina di Discourse avvierà l’accesso SSO. Per disconnettere completamente gli utenti da Discourse, devi anche disconnetterli da WordPress. Questo può essere fatto inserendo https://example.com/?request=logout nell’impostazione del sito logout redirect di Discourse. Sostituisci example.com con il dominio del tuo sito WordPress. Fammi sapere se hai provato questa soluzione e il problema persiste.
è un’installazione WordPress normale (non multisito). Inoltre, l’uscita è stata risolta.
Il problema riguarda il reindirizzamento dopo il login, ovvero gli utenti non vengono reindirizzati al sito Discourse dopo il login su WP. Sembra invece che MemberPress li stia inviando a una pagina predefinita di WordPress.
Sai se hai impostato la pagina verso cui gli utenti vengono reindirizzati nelle opzioni di MemberPress? In tal caso, quale opzione hai configurato per questo?
Il problema si verifica nella funzione track_and_override_login_redirect_mepr. Tale funzione è agganciata al filtro mepr-process-login-redirect-url di MemberPress. Potrebbe essere possibile agganciarsi a questa funzione e sovrascriverla controllando la query che è stata impostata. Questo può essere fatto con la funzione wp_get_referer().
Non credo di avere tempo per risolvere la questione oggi, ma ci darò un’altra occhiata nei prossimi giorni.
Ho dato un’altra occhiata a questo mentre era ancora fresco nella mia mente. Aggiungere la seguente funzione al file functions.php del mio tema ha risolto il problema per me, ma non è stato testato molto.
La funzione si aggancia al filtro 'mepr-process-login-redirect-url' prima che MemberPress vi si agganci. Successivamente, verifica il valore dei parametri di query per capire se la richiesta è stata avviata da una richiesta SSO da Discourse. Se lo è, reindirizza l’utente alla homepage di WordPress mantenendo intatti i parametri di query. Questo farà sì che il plugin WP Discourse completi la richiesta SSO. Penso che questo possa funzionare anche se la tua homepage è protetta da MemberPress, ma sarebbe bene confermarlo.
Se la richiesta non è stata avviata da Discourse, viene chiamata la funzione statica MeprProductsCtrl::track_and_override_login_redirect_mepr con gli argomenti passati al filtro.
Esito un po’ nell’aggiungere questo codice al tuo sito di produzione. Se decidi di provarlo, assicurati di poter rimuovere il codice dal tuo server nel caso in cui rompa il sito. Assicurati di testarlo con il maggior numero possibile di livelli utente/abbonamento.