Temos o WP como provedor de SSO (estamos gerenciando o acesso ao Discourse e ao conteúdo do LMS com o MemberPress no WP). O cadastro e o login de novos usuários funcionam perfeitamente, mas não consigo fazer logout.
Adicionei o redirecionamento ?request=logout, mas assim que atualizo a página de logout, estou logado novamente.
No início, pensei que pudesse ser porque tinha o WP aberto em outra aba do navegador, mas o comportamento persiste mesmo depois de fazer logout do WP e fechar a aba.
Sinto que estamos muito perto de resolver isso. Espero que alguém queira compartilhar algumas dicas de solução de problemas para que possamos resolver isso de uma vez por todas.
Obrigado.
Aqui está um pequeno gif demonstrando (2) logouts seguidos.
Parece que você configurou tudo corretamente. Este é um site WordPress comum ou faz parte de uma configuração multisite? Pode haver um problema ao sincronizar o logout com sites diferentes do site principal da rede.
Ao analisar sua gravação de tela, parece que seu site Discourse está configurado como login obrigatório. O que está acontecendo é que o Discourse está redirecionando você para seu site WordPress com uma solicitação SSO e, em seguida, fazendo login automaticamente porque você ainda está logado no WordPress. O comportamento esperado é que você termine na página de login do WordPress como um usuário deslogado.
A sincronização de logouts com o Discourse depende do hook do WordPress clear_auth_cookie. É possível que outro plugin no seu site esteja interferindo nisso.
Se você possui um site de desenvolvimento, tente desativar todos os plugins, exceto o WP Discourse, e veja se o problema persiste. Se você não tem um site de desenvolvimento, pode tentar desativar os plugins apenas para a sessão do seu usuário com o plugin Health Check. Detalhes sobre como usar esse plugin para desativar plugins durante uma sessão estão disponíveis aqui: Troubleshooting using the Health Check – Make WordPress Support.
Boom. Não tenho um site de desenvolvedor, mas o plugin de verificação de saúde funcionou perfeitamente — na primeira tentativa, inclusive. Parece que vou me aprofundar no MemberPress e no auth_cookie. Obrigado, Simon.
Aqui estão os passos que segui, caso alguém mais precise:
Instalei o plugin Health Check.
– Coloquei o site no modo de solução de problemas.
– Ativei o plugin WP-Discourse.
Abri o site do Discourse.
– Fiz logout.
– Fui redirecionado para a página de login do WP (o formulário de login estava ausente).
– Não consegui fazer login novamente no Discourse de forma alguma. (Funcionalidade desejada.)
Ativei o MemberPress.
– (Percebi que a página de login usa campos de usuário/senha gerados pelo MemberPress.)
– O formulário de login reapareceu.
Abri o site do Discourse e já estava logado.
Tentei fazer logout, fui redirecionado em um loop de volta ao Discourse, ainda logado.
Uso o WP desde 2007 e nunca tinha ouvido falar desse plugin até agora. Obrigado novamente, Simon!
Gostaria de verificar o que está acontecendo com o MemberPress, mas é um plugin pago. Pela documentação deles, parece que existe uma URL de Redirecionamento de Logout do MemberPress que pode ser configurada na página de opções do plugin. O problema pode estar relacionado a essa configuração.
Estou tentando descobrir como fazer o logout do Discourse a partir de um site externo. Tentei encontrar documentação e parece que a maneira de fazer isso é enviar uma requisição POST via API, conforme mencionado neste post.
O problema é que não entendo bem como fazer a requisição à API e não consigo saber como prosseguir. Baixei o Postman e estou tentando experimentar por lá, mas estou com dificuldades. Não tenho certeza de como criar a requisição de API necessária, nem de como implementá-la no site externo depois.
Alguma sugestão sobre como resolver esse problema?
O site é um site WordPress usando o Memberpress e atua como provedor de SSO para o meu fórum Discourse. Após o logout no WordPress, posso redirecioná-los para uma URL, que gostaria que fosse usada para fazê-los fazer logout no Discourse ao mesmo tempo. Ou talvez eu possa enviar uma solicitação de API por meio de uma função PHP que eu possa adicionar ao functions.php?
Você está usando o plugin WP Discourse para SSO? Se sim, ao sair do WordPress, você também deve sair do Discourse, mas há um relato recente de que isso não está funcionando quando o plugin Memberpress é usado no WordPress: SSO: Unable to logout. Você está enfrentando o mesmo problema?
Estou tendo algumas dificuldades para reproduzir o problema. Se eu pudesse criar uma conta em algum dos seus sites WordPress, talvez conseguisse entender o que está acontecendo. Não preciso de acesso de administrador. Se for possível, envie-me uma mensagem privada com os detalhes do site.
@TGP Você pode tentar alterar a configuração logout redirect do seu Discourse para https://www.thegearheadproject.com/?request=logout? Parece que solicitações sem www estão sendo redirecionadas para a URL com www, mas o parâmetro de consulta request=logout não está sendo preservado no redirecionamento.
Isso pode não resolver o problema, mas seria bom descartá-lo como causa.
Parece provável que os problemas de logout nesses sites não estejam relacionados.
@robtech, quando faço logout do seu site Discourse, também faço logout do seu site WordPress, então essa parte do processo de logout parece estar funcionando corretamente no seu site. O problema que estou encontrando é com a sincronização dos logouts do WordPress para o Discourse. Ao fazer logout do seu site WordPress, não estou sendo desconectado do seu site Discourse.
Pode verificar se a Chave de API e o Nome de Usuário de Publicação configurados na aba Conexão WP Discourse estão corretos? É necessário usar uma Chave de API de administrador e um nome de usuário de administrador. A opção mais fácil é usar a Chave de API Mestre do seu site e usar ‘system’ como nome de usuário de publicação. Você deve ver uma notificação dizendo que está “conectado ao Discourse” após salvar as opções nesta página. Credenciais de administrador são necessárias nesta seção para que os usuários possam ser desconectados do Discourse ao fazer logout do WordPress.