Configurei o Discourse Connect SSO usando o plugin oficial, para que meus usuários do WP façam login no Discourse sem registrar outro usuário lá. Tudo funciona bem, exceto que cada solicitação do painel do WP (área administrativa) é atrasada em 10s devido a um timeout que descobri apenas através do plugin Query Monitor.
https://{nosso-endereço-do-fórum}/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
Mesmo que funcionasse, por que há necessidade de uma chamada como essa em primeiro lugar? Como posso desativá-la?
Fórum e site estão em servidores separados. Não há Cloudflare. SSL é letsencrypt. Não teve esse problema no staging. Mudei para o live, criei uma nova chave de API e segredo, tentando resolver isso, mas não funcionou.
O plugin diz Você não está conectado ao Discourse. Verifique se as configurações de conexão estão corretas. Se o problema persistir, ative os logs de conexão e verifique os Logs. …mas estou, pois os usuários conseguem fazer login no fórum sem problemas apenas clicando em um link que contém seu endereço.
Os logs no WP dizem:
[2024-10-31 10:54:47] connection.INFO: check_connection_status.failed_to_connect {"error":"wpdc_response_error","message":"Uma resposta inválida foi retornada do Discourse","http_code":"","http_body":""}
Pensei que essa coisa estranha de segurança do WP a estivesse prejudicando, então adicionei isso, mas também não adiantou:
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 === "{nosso-endereço-do-fórum}") {
return true; // Permite a solicitação indicando que o host É externo
}
return $is_external;
}