Quando configurei o SSO com o WordPress originalmente, os usuários acessavam a URL do fórum, eram redirecionados para a página de login do WordPress e, após o login, eram redirecionados de volta ao fórum.
Mas em algum momento, isso mudou e não faço ideia de como. Agora, após o login no WordPress, o usuário é redirecionado para o painel do WordPress.
Além disso, outra coisa estranha é que, quando faço logout no Discourse, vejo a mensagem “Você foi desconectado”, mas ao clicar no botão “Atualizar”, não fui realmente desconectado. Ainda consigo postar, responder etc. Às vezes, preciso fazer logout 2 ou 3 vezes até ser realmente desconectado. Então funciona, só não de forma consistente.
Provavelmente, há um plugin do WordPress interferindo em suas rotas e/ou se conectando às suas funções de login. Basta desativar metade dos plugins do WordPress e ver qual metade está causando o problema; em seguida, desative metade dos plugins desse grupo, e assim por diante.
Comece com os plugins relacionados a autenticação, membros e login.
A resposta do Michael provavelmente está correta. Além disso, você tem o plugin WooCommerce instalado no seu site? Se sim, há um código que você pode adicionar ao seu site para resolver o problema.
O problema de logout pode estar relacionado ao problema de redirecionamento de login. Se desativar os plugins não resolver o problema, avise-nos.
O problema de login parece ser um conflito com o plugin MemberPress. Então, acho que preciso investigar uma possível solução com eles.
O problema de logout foi causado por um plugin de redirecionamento. Havia um redirecionamento para a página inicial que estava causando o problema com o logout do Discourse.
Michael – agradeço muito sua ajuda e o conselho sobre quais plugins podem ser suspeitos. Isso me economizou muito tempo, pois foram os dois primeiros plugins que verifiquei.
Simon – obrigado por me falar sobre o plugin WordPress Health Check. Eu nunca tinha ouvido falar dele antes, mas vou instalá-lo agora e usá-lo para solucionar problemas no futuro.
Verifique as configurações do plugin em busca de redirecionamentos de login que ele cria. Parece que ele está redirecionando os usuários para a página de perfil antes que o plugin WP Discourse possa redirecioná-los de volta para o Discourse. Se você encontrar a solução, poste-a aqui. Caso não a encontre, avise-nos. Posso tentar instalar o MemberPress no meu site local.
Sim, o plugin Health Check é ótimo para depurar esse tipo de situação.
Não consegui avançar com o MemberPress na resolução disso. É definitivamente um conflito com o MemberPress, pois é o único plugin onde configurei uma URL de redirecionamento específica, ou seja, /jump.
Não tenho muita certeza de como proceder a partir daqui. Quando alguém faz login no meu site WordPress, quero redirecionar essas pessoas para /jump após o login. Então, o MemberPress está fazendo o seu trabalho nesse aspecto.
Mas quando as pessoas acessam meu site Discourse, por exemplo, community.mydomain.com, elas são redirecionadas para a página de login do WordPress, mas após o login, também são enviadas para /jump em vez de serem redirecionadas de volta ao fórum.
Você sabe quais configurações ativou no MemberPress para criar o redirecionamento? Tenho uma versão recente do MemberPress instalada no meu site de desenvolvimento, mas não consegui reproduzir nem o problema de login, nem o problema de os usuários não serem deslogados do Discourse.
Seu site WordPress está em uma instalação multisite ou é apenas uma instalação normal do WordPress?
É possível que o problema que você está vendo, de os usuários não serem deslogados do Discourse, seja porque seu site do Discourse está configurado para exigir login para visualizar o conteúdo. Nesse caso, atualizar a página do Discourse iniciará o login SSO. Para deslogar completamente os usuários do Discourse, você também precisa deslogá-los do WordPress. Isso pode ser feito inserindo https://exemplo.com.br/?request=logout na configuração de site logout redirect do Discourse. Substitua exemplo.com.br pelo domínio do seu site WordPress. Me avise se você fez isso e ainda não estiver funcionando.
É uma instalação normal do WordPress (não multisite). E o logout foi corrigido.
O problema é com o redirecionamento após o login, ou seja, os usuários não são redirecionados de volta para o site do Discourse após o login no WP. Em vez disso, parece que o MemberPress os está enviando para uma página padrão no WordPress.
O problema está ocorrendo na função track_and_override_login_redirect_mepr. Essa função está conectada ao filtro mepr-process-login-redirect-url do MemberPress. É possível conectar-se a essa função e substituí-la verificando a consulta que foi definida. Isso pode ser feito com a função wp_get_referer().
Acho que não terei tempo para resolver isso hoje, mas darei outra olhada nos próximos dias.
Dê uma nova olhada nisso enquanto está fresco na minha mente. Adicionar a seguinte função ao arquivo functions.php do meu tema resolveu o problema para mim, mas isso não foi testado muito.
A função está se conectando ao filtro 'mepr-process-login-redirect-url' antes que o MemberPress o faça. Em seguida, verifica o valor dos parâmetros de consulta para ver se a consulta foi iniciada por uma solicitação SSO do Discourse. Se foi, redireciona o usuário para a página inicial do WordPress mantendo os parâmetros de consulta intactos. Isso fará com que o plugin WP Discourse conclua a solicitação SSO. Acredito que isso ainda possa funcionar se sua página inicial estiver protegida pelo MemberPress, mas seria bom confirmar isso.
Se a solicitação não foi iniciada pelo Discourse, o método estático MeprProductsCtrl::track_and_override_login_redirect_mepr é chamado com os argumentos que foram passados para o filtro.
Estou um pouco hesitante em recomendar adicionar esse código ao seu site de produção. Se você tentar, certifique-se de poder remover o código do seu servidor caso ele quebre seu site. Certifique-se de testá-lo com o maior número possível de níveis de usuário/membro.
Isso é INCRÍVEL, Simon! Você é uma estrela do rock!
Também estou relutante em adicionar isso ao meu site de produção imediatamente. Acho que talvez precise configurar um site de teste para fazer isso corretamente.