Tenemos WP como proveedor de SSO (estamos gestionando el acceso a Discourse y al contenido del LMS con MemberPress en WP). El registro y el inicio de sesión de nuevos usuarios funcionan a la perfección, pero no logro cerrar sesión.
He añadido la redirección ?request=logout, pero en cuanto actualizo la página de cierre de sesión, vuelvo a entrar.
Al principio pensé que podría deberse a tener WP abierto en otra pestaña del navegador, pero el comportamiento persiste incluso después de haber cerrado sesión en WP y cerrado la pestaña.
Siento que estamos realmente cerca de resolverlo. Espero que alguien pueda compartir algún consejo de solución de problemas para que podamos dar por concluido este asunto.
Gracias.
Aquí hay un pequeño gif que demuestra (2) cierres de sesión seguidos.
Parece que tienes todo configurado correctamente. ¿Es este un sitio de WordPress normal o forma parte de una configuración multisitio? Puede haber un problema al sincronizar el cierre de sesión con sitios distintos del sitio principal de la red.
Al observar tu grabación de pantalla, parece que tu sitio de Discourse está configurado como login required. Lo que ocurre es que Discourse te redirige a tu sitio de WordPress con una solicitud SSO y luego te inicia sesión automáticamente porque aún tienes una sesión activa en WordPress. El comportamiento esperado es que termines en la página de inicio de sesión de WordPress como un usuario sin sesión iniciada.
La sincronización del cierre de sesión con Discourse depende del hook de WordPress clear_auth_cookie. Es posible que otro plugin de tu sitio esté interfiriendo con esto.
Si tienes un sitio de desarrollo, prueba desactivando todos los plugins excepto WP Discourse y verifica si el problema persiste. Si no tienes un sitio de desarrollo, puedes intentar desactivar los plugins solo para la sesión de tu usuario con el plugin Health Check. Los detalles sobre cómo usar ese plugin para desactivar plugins en una sesión se encuentran aquí: Troubleshooting using the Health Check – Make WordPress Support.
¡Boom! No tengo un sitio de desarrollo, pero el plugin de verificación de salud funcionó de maravilla, incluso a la primera. Parece que voy a profundizar en MemberPress y en auth_cookie. Gracias, Simon.
Aquí están los pasos que seguí, por si alguien más los necesita:
Instalé el plugin Health Check.
– Puse el sitio en modo de resolución de problemas.
– Habilité el plugin WP-Discourse.
Abrí el sitio de Discourse.
– Cerré sesión.
– Me redirigieron a la página de inicio de sesión de WP (faltaba el formulario de inicio de sesión).
– No pude volver a iniciar sesión en Discourse en absoluto. (Funcionalidad deseada.)
Habilité MemberPress.
– (Me di cuenta de que la página de inicio de sesión utiliza los campos de usuario/contraseña generados por MemberPress.)
– El formulario de inicio de sesión reapareció.
Abrí el sitio de Discourse y ya estaba conectado.
Intenté cerrar sesión, pero fui redirigido en un bucle de vuelta a Discourse, aún conectado.
He estado usando WP desde 2007 y nunca había oído hablar de este plugin hasta ahora. ¡Gracias de nuevo, Simon!
Me gustaría verificar qué está ocurriendo con MemberPress, pero es un plugin de pago. Al revisar su documentación, parece que existe una URL de redirección al cerrar sesión en MemberPress que se puede configurar en la página de opciones del plugin. El problema podría estar relacionado con esa configuración.
Estoy intentando encontrar una forma de cerrar la sesión de Discourse desde un sitio externo. He buscado documentación y parece que la forma de hacerlo es enviar una solicitud POST a la API, como se menciona en este post.
El problema es que no termino de entender cómo realizar la solicitud a la API y no sé cómo seguir a partir de aquí. He descargado Postman y estoy tratando de experimentar allí, pero me estoy quedando atascado. No estoy seguro de cómo crear la solicitud a la API que necesito, ni de cómo implementarla posteriormente en el sitio externo.
¿Alguna sugerencia sobre cómo resolver este problema?
El sitio es un sitio de WordPress que utiliza MemberPress y actúa como proveedor de SSO para mi foro de Discourse. Después de que se desconectan en WordPress, puedo redirigirlos a una URL, la cual me gustaría usar para desconectarlos también de Discourse al mismo tiempo. ¿O quizás puedo enviar una solicitud de API mediante una función de PHP que podría agregar a functions.php?
¿Estás utilizando el plugin WP Discourse para SSO? Si es así, cerrar sesión en WordPress debería cerrar tu sesión en Discourse, pero hay un informe reciente de que esto no funciona cuando se utiliza el plugin Memberpress en WordPress: SSO: Unable to logout. ¿Estás experimentando el mismo problema?
Estoy teniendo algunos problemas para reproducir el problema. Si pudiera crear una cuenta en cualquiera de sus sitios de WordPress, tal vez podría ver qué está pasando. No necesito acceso de administrador. Si esto es posible, envíame un mensaje privado con los detalles del sitio.
@TGP ¿Podrías intentar cambiar la configuración de logout redirect de Discourse a https://www.thegearheadproject.com/?request=logout? Parece que las solicitudes que no incluyen www se redirigen a la URL con www, pero el parámetro de consulta request=logout no se conserva en la redirección.
Esto puede que no resuelva el problema, pero sería bueno descartarlo como causa.
Parece probable que los problemas de cierre de sesión en estos sitios no estén relacionados.
@robtech cuando cierro sesión en tu sitio de Discourse, también se cierra mi sesión en tu sitio de WordPress, por lo que esta parte del proceso de cierre de sesión parece funcionar correctamente en tu sitio. El problema que estoy encontrando es con la sincronización de los cierres de sesión desde WordPress hacia Discourse. Cerrar sesión en tu sitio de WordPress no me cierra la sesión en tu sitio de Discourse.
¿Podrías asegurarte de que la clave de API y el nombre de usuario de publicación que has configurado en la pestaña Conexión de WP Discourse sean correctos? Necesitas usar una clave de API de administrador y un nombre de usuario de administrador. La opción más sencilla es usar la clave maestra de API de tu sitio y utilizar ‘system’ como nombre de usuario de publicación. Deberías ver un aviso que indica que estás “conectado a Discourse” después de guardar las opciones en esta página. Se requieren credenciales de administrador en esta sección para que los usuarios puedan cerrar sesión en Discourse cuando se cierra la sesión en WordPress.