J’ai configuré Discourse Connect SSO à l’aide du plugin officiel, de sorte que mes utilisateurs WP se connectent à Discourse sans avoir à enregistrer un nouvel utilisateur là-bas. Tout fonctionne bien, sauf que chaque requête du tableau de bord WP (zone d’administration) est ralentie de 10 secondes en raison d’un délai d’attente que j’ai découvert uniquement via le plugin Query Monitor.
https://{notre-adresse-forum}/site.json Erreur cURL 28 : Délai de connexion expiré après 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
Même si cela fonctionnait, pourquoi un appel comme celui-ci est-il nécessaire en premier lieu ? Comment puis-je le désactiver ?
Le forum et le site sont sur des serveurs séparés. Il n’y a pas de Cloudflare. SSL est letsencrypt. Cela ne posait pas de problème sur staging. Je suis passé en production, j’ai créé une nouvelle clé API et un nouveau secret, j’ai essayé de résoudre ce problème mais cela n’a pas fonctionné.
Le plugin indique Vous n’êtes pas connecté à Discourse. Vérifiez que vos paramètres de connexion sont corrects. Si le problème persiste, activez les journaux de connexion et consultez les journaux. … mais je le suis, car les utilisateurs peuvent se connecter de manière transparente au forum en cliquant simplement sur un lien contenant son adresse.
Les journaux dans WP indiquent :
[2024-10-31 10:54:47] connection.INFO: check_connection_status.failed_to_connect {"error":"wpdc_response_error","message":"Une réponse invalide a été renvoyée par Discourse","http_code":"","http_body":""}
Je pensais que cette chose étrange de sécurité WP la bloquait, j’ai donc ajouté ceci mais sans succès non plus :
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 === "{notre-adresse-forum}") {
return true; // Autoriser la requête en indiquant que l'hôte EST externe
}
return $is_external;
}