Discourse-Login leitet zum WordPress-Dashboard weiter

Als ich SSO ursprünglich mit WordPress eingerichtet habe, wurden Benutzer zur Forum-URL weitergeleitet, dann zur WordPress-Anmeldeseite und nach dem Login zurück zum Forum.

Irgendwann hat sich das jedoch geändert, und ich habe keine Ahnung, wie. Jetzt wird der Benutzer nach dem WordPress-Login stattdessen zum WordPress-Dashboard weitergeleitet.

Eine weitere seltsame Sache ist, dass ich beim Abmelden von Discourse die Meldung „Sie wurden abgemeldet

Wahrscheinlich stört ein WordPress-Plugin Ihre Routen und/oder greift in Ihre Login-Funktionen ein. Deaktivieren Sie einfach die Hälfte Ihrer WordPress-Plugins und prüfen Sie, welche Hälfte das Problem verursacht. Deaktivieren Sie dann erneut die Hälfte der Plugins in dieser Gruppe und fahren Sie so fort.

Beginnen Sie mit Plugins, die mit Authentifizierung, Mitgliedschaften oder Login zu tun haben.

Michaels Antwort ist wahrscheinlich korrekt. Haben Sie das WooCommerce-Plugin auf Ihrer Website installiert? Wenn ja, können Sie einen bestimmten Code hinzufügen, um das Problem zu beheben.

Das Abmeldungsproblem könnte mit dem Problem der Weiterleitung beim Anmelden zusammenhängen. Wenn das Deaktivieren von Plugins das Problem nicht löst, lassen Sie es uns bitte wissen.

Wenn Sie Plugins nicht für alle Ihre Benutzer deaktivieren möchten, können Sie sie für Ihre individuelle Sitzung mit dem WordPress-Plugin „Health Check“ deaktivieren: Health Check & Troubleshooting – WordPress plugin | WordPress.org English (Canada).

Danke, Michael und Simon!

Das Anmeldeproblem scheint ein Konflikt mit dem MemberPress-Plugin zu sein. Ich werde mich also mit ihnen in Verbindung setzen, um eine mögliche Lösung zu finden.

Das Abmeldeproblem wurde durch ein Weiterleitungs-Plugin verursacht. Eine Umleitung auf die Startseite hat die Abmeldung von Discourse gestört.

Michael – ich schätze deine Hilfe und den Hinweis auf verdächtige Plugins sehr. Das hat mir eine Menge Zeit gespart, denn das waren die ersten beiden Plugins, die ich überprüft habe.

Simon – danke für den Hinweis auf das WordPress-Plugin „Health Check“. Davon hatte ich bisher noch nichts gehört, aber ich werde es jetzt installieren und zukünftig zur Fehlerbehebung verwenden.

Überprüfen Sie die Einstellungen des Plugins auf etwaige Weiterleitungen beim Anmelden. Es scheint, dass es Benutzer auf ihre Profilseite weiterleitet, bevor das WP Discourse-Plugin die Benutzer zurück zu Discourse weiterleiten kann. Wenn Sie die Lösung finden, posten Sie sie bitte hier. Falls Sie die Lösung nicht finden, teilen Sie uns dies mit. Ich kann versuchen, MemberPress auf meiner lokalen Site zu installieren.

Ja, das Health Check-Plugin ist großartig, um solche Probleme zu debuggen.

Hallo @simon,

ich habe mit MemberPress keine Lösung für dieses Problem gefunden. Es handelt sich definitiv um einen Konflikt mit MemberPress, da dies das einzige Plugin ist, bei dem ich eine spezifische Weiterleitungs-URL (also /jump) festgelegt habe.

Ich bin mir nicht sicher, wie es weitergehen soll. Wenn sich jemand über meine WordPress-Seite anmeldet, sollen diese Personen nach dem Login zu /jump weitergeleitet werden. MemberPress erfüllt diese Aufgabe also.

Wenn Personen jedoch auf meine Discourse-Seite zugreifen (z. B. community.mydomain.com), werden sie zur WordPress-Login-Seite weitergeleitet. Nach dem Login landen sie jedoch ebenfalls auf /jump, anstatt zurück zum Forum weitergeleitet zu werden.

Hast du Ideen, was ich noch versuchen kann?

Danke – Omer

Weißt du, welche Einstellungen du in MemberPress aktiviert hast, um die Weiterleitung zu erstellen? Ich habe eine aktuelle Version von MemberPress auf meiner Dev-Site installiert, konnte jedoch weder das Login-Problem noch das Problem, dass Benutzer nicht von Discourse abgemeldet werden, nachstellen.

Ist deine WordPress-Site eine Multisite-Installation oder eine normale WordPress-Installation?

Es ist möglich, dass das Problem, dass Benutzer nicht von Discourse abgemeldet werden, daran liegt, dass deine Discourse-Site so konfiguriert ist, dass eine Anmeldung erforderlich ist, um Inhalte anzuzeigen. In diesem Fall wird beim Aktualisieren der Discourse-Seite eine SSO-Anmeldung ausgelöst. Um Benutzer vollständig von Discourse abzumelden, musst du sie auch von WordPress abmelden. Dies kannst du erreichen, indem du in der Discourse-Site-Einstellung „logout redirect

Hallo Simon,

Es handelt sich um eine normale WordPress-Installation (kein Multisite). Das Abmelden wurde behoben.

Das Problem liegt bei der Weiterleitung nach dem Login, d. h. die Benutzer werden nach dem WP-Login nicht zurück zur Discourse-Seite weitergeleitet. Stattdessen scheint MemberPress sie auf eine Standardseite in WordPress zu schicken.

–Omer

Weißt du, ob du in den MemberPress-Optionen die Seite festgelegt hast, auf die Benutzer weitergeleitet werden? Wenn ja, welche Option hast du dafür eingestellt?

Ja, habe ich. Ich habe die Weiterleitung der Seite an zwei Stellen festgelegt:

  1. MemberPress > Einstellungen > Konto > “URL, zu der Mitglieder nach dem Login weitergeleitet werden sollen”

  2. MemberPress > Mitgliedschaften > [Mitgliedschaftsprogramm] > Erweitert > “Standard-Weiterleitungs-URL für den Login”

Danke! Das ist die Option, die das Problem verursacht.

Interessant! Ich muss diese Einstellung dort belassen, damit Mitglieder, wenn sie die WP-Seite besuchen und auf „Anmelden

Das Problem tritt in der Funktion track_and_override_login_redirect_mepr auf. Diese Funktion wird über den MemberPress-Filter mepr-process-login-redirect-url eingebunden. Es könnte möglich sein, diese Funktion zu hooken und zu überschreiben, indem nach den gesetzten Abfrageparametern geprüft wird. Dies lässt sich mit der Funktion wp_get_referer() umsetzen.

Ich habe heute wahrscheinlich keine Zeit, das zu klären, werde es aber in den nächsten Tagen erneut prüfen.

Ich habe mir das, während es mir noch frisch im Gedächtnis ist, einmal genauer angesehen. Das Hinzufügen der folgenden Funktion in die Datei functions.php meines Themes hat das Problem für mich behoben, wurde jedoch noch nicht ausreichend getestet.

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 );
}

Die Funktion greift über den Filter 'mepr-process-login-redirect-url' zu, bevor MemberPress diesen Filter nutzt. Anschließend wird geprüft, ob die Abfrageparameter auf eine SSO-Anfrage von Discourse hinweisen. Falls ja, wird der Benutzer auf die WordPress-Startseite mit den ursprünglichen Abfrageparametern umgeleitet. Dadurch wird das WP Discourse-Plugin dazu veranlasst, die SSO-Anfrage abzuschließen. Ich glaube, dass dies auch dann noch funktionieren kann, wenn Ihre Startseite durch MemberPress geschützt ist, aber es wäre gut, dies zu bestätigen.

Falls die Anfrage nicht von Discourse initiiert wurde, wird die statische Methode MeprProductsCtrl::track_and_override_login_redirect_mepr mit den an den Filter übergebenen Argumenten aufgerufen.

Ich zögere etwas, diesen Code für Ihre Produktionsumgebung zu empfehlen. Wenn Sie es versuchen, stellen Sie sicher, dass Sie den Code von Ihrem Server entfernen können, falls er Probleme verursacht. Testen Sie ihn unbedingt mit so vielen Benutzer- und Mitgliedschaftsebenen wie möglich.

Das ist großartig, Simon! Du bist ein Rockstar!

Ich zögere auch, dies sofort auf meine Produktionsseite zu übertragen. Ich denke, ich muss dafür wahrscheinlich erst eine Testseite einrichten.