He configurado Discourse Connect SSO usando el plugin oficial, por lo que mis usuarios de WP inician sesión en Discourse sin registrar otro usuario allí. Todo funciona bien, excepto que cada solicitud del panel de control de WP (área de administración) se ralentiza en 10 segundos debido a un tiempo de espera que descubrí solo a través del plugin Query Monitor.
https://{nuestra-dirección-del-foro}/site.json cURL error 28: Connection timeout after 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
Incluso si funcionara, ¿por qué hay una necesidad de una llamada como esta en primer lugar? ¿Cómo puedo deshabilitarla?
El foro y el sitio están en servidores separados. No hay Cloudflare. SSL es letsencrypt. No tuvo este problema en staging. Me mudé a producción, creé una nueva clave API y secreto, intenté resolver esto pero no funcionó.
El plugin dice No estás conectado a Discourse. Comprueba que la configuración de tu conexión sea correcta. Si el problema persiste, habilita los registros de conexión y consulta los Registros. …pero sí lo estoy, ya que los usuarios pueden iniciar sesión sin problemas en el foro simplemente haciendo clic en un enlace que contiene su dirección.
Los registros en WP dicen:
[2024-10-31 10:54:47] connection.INFO: check_connection_status.failed_to_connect {"error":"wpdc_response_error","message":"Se devolvió una respuesta no válida desde Discourse","http_code":"","http_body":""}
Pensé que esa extraña cosa de seguridad de WP la estaba paralizando, así que agregué esto pero tampoco funcionó:
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 === "{nuestra-dirección-del-foro}") {
return true; // Permitir la solicitud indicando que el host SÍ es externo
}
return $is_external;
}