Ich habe Discourse Connect SSO mit dem offiziellen Plugin eingerichtet, sodass sich meine WP-Benutzer bei Discourse anmelden können, ohne sich dort erneut registrieren zu müssen. Es funktioniert alles gut, außer dass jede einzelne Anfrage an das WP-Dashboard (Admin-Bereich) um 10 Sekunden verzögert wird, aufgrund eines Timeouts, den ich nur über das Query Monitor Plugin entdeckt habe.
https://{unsere-forum-adresse}/site.json cURL-Fehler 28: Verbindungstimeout nach 10001 ms
WPDiscourse\Admin\MetaBox->discourse_request()
wp-content/plugins/wp-discourse/lib/plugin-utilities.php:516
WPDiscourse\Admin\MetaBox->get_discourse_categories()
wp-content/plugins/wp-discourse/lib/plugin-utilities.php:273
WPDiscourse\Admin\MetaBox->setup_options()
wp-content/plugins/wp-discourse/admin/meta-box.php:49
do_action('admin_init')
wp-includes/plugin.php:517
Plugin: wp-discourse
Auch wenn es funktionieren würde, warum ist ein solcher Aufruf überhaupt notwendig? Wie kann ich ihn deaktivieren?
Forum und Website befinden sich auf separaten Servern. Es gibt kein Cloudflare. SSL ist Let’s Encrypt. Auf Staging hatte es dieses Problem nicht. Ich bin zum Live-System gewechselt, habe einen neuen API-Schlüssel und ein neues Secret erstellt und versucht, dies zu beheben, aber es hat nicht funktioniert.
Das Plugin sagt Sie sind nicht mit Discourse verbunden. Überprüfen Sie, ob Ihre Verbindungseinstellungen korrekt sind. Wenn das Problem weiterhin besteht, aktivieren Sie die Verbindungsprotokolle und überprüfen Sie die Protokolle. …aber das bin ich, da Benutzer sich nahtlos im Forum anmelden können, indem sie einfach auf einen Link klicken, der die Adresse enthält.
Die Protokolle in WP sagen:
[2024-10-31 10:54:47] connection.INFO: check_connection_status.failed_to_connect {"error":"wpdc_response_error","message":"Eine ungültige Antwort wurde von Discourse zurückgegeben","http_code":"","http_body":""}
Ich dachte, diese seltsame WP-Sicherheitsfunktion würde es behindern, also habe ich Folgendes hinzugefügt, aber es hat auch nichts gebracht:
add_filter('http_request_host_is_external', [$this, 'mark_discourse_api_url_external'], 10, 3);
function mark_discourse_api_url_external($is_external, $host, $url)
{
if ($host === "{unsere-forum-adresse}") {
return true; // Erlaubt die Anfrage, indem angezeigt wird, dass der Host extern IST
}
return $is_external;
}