Accesso a Discourse reindirizza alla dashboard di WordPress

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.

Qualche idea su come posso risolvere il problema?

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.

Se non desideri disattivare i plugin per tutti i tuoi utenti, puoi disattivarli per la tua sessione individuale con il plugin Health Check di WordPress: Health Check & Troubleshooting – WordPress plugin | WordPress.org English (Canada).

Grazie Michael e Simon!

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.

Ciao @simon

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.

Hai qualche idea su cosa altro potrei provare?

Grazie - Omer

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.

Ciao Simon,

è 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.

–Omer

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?

Sì, l’ho fatto. Ho impostato il reindirizzamento della pagina in due punti:

  1. MemberPress > Impostazioni > Account > “URL di destinazione per i membri dopo l’accesso”

  2. MemberPress > Abbonamenti > [Piano abbonamento] > Avanzate > “URL di reindirizzamento predefinito per l’accesso”

Grazie! Questa è l’opzione che sta causando il problema.

Interessante! Devo lasciare quella impostazione lì per quando gli utenti vanno sul sito WP e cliccano su Accedi.

Hai idea se ci sia qualche codice PHP che posso aggiungere al mio functions.php per sovrascriverlo per il login a Discourse?

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.

add_filter( 'mepr-process-login-redirect-url', 'wpdc_login_redirect', 12, 3);
function wpdc_login_redirect( $redirect, $user = false, $is_wp_login_page = false ) {
	$referer = wp_get_referer();
	if ( $referer ) {
		$query_params = [];
		parse_str( parse_url( $referer, PHP_URL_QUERY ), $query_params );
		$sso_referer = ! empty( $query_params['redirect_to'] ) && preg_match( '/^\/\?sso/', $query_params['redirect_to'] );
		if ( $sso_referer ) {

			return home_url( $query_params['redirect_to'] );
		}
	}

	return MeprProductsCtrl::track_and_override_login_redirect_mepr( $redirect, $user, $is_wp_login_page );
}

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.

Questo è FANTASTICO, Simon! Sei una rock star!

Anch’io sono riluttante ad aggiungerlo subito al mio sito di produzione. Penso che dovrò configurare un sito di test per farlo correttamente.