Cómo cerrar sesión de un usuario si no los conozco?

Ok, imagina este escenario sencillo:

  1. El usuario A inicia sesión en mi sitio y luego hace clic en ‘Foros’. Es redirigido a Discourse, que realiza una llamada de retorno a mi sitio mediante SSO, y se autentica e inicia sesión automáticamente en Discourse. Genial, funciona perfectamente.

  2. Después de un tiempo, el usuario A se aleja del ordenador y su sesión expira automáticamente. Nunca hace clic específicamente en ‘Cerrar sesión’ ni en mi aplicación ni en Discourse.

  3. El usuario B inicia sesión en mi sitio en el mismo dispositivo, hace clic para ir a los foros y, como Discourse aún tiene al usuario A con sesión iniciada, no solicita SSO porque la sesión de Discourse sigue activa. Ahora el usuario B está conectado a Discourse como si fuera el usuario A. :-\

¿Cómo puedo manejar este escenario?

Gracias,
Eric

Puedes conectar una llamada a la API para cerrar automáticamente la sesión en Discourse:

Bien, pero ¿cómo puedo hacer esto si el usuario se ha “alejado” del ordenador y su sesión ha caducado? Quizás esto sea más una pregunta de PHP (que es con lo que está escrito mi sitio principal)…

Este truco aún debería funcionar:

@riking Lo siento, tenía una pregunta curiosa.

¿Cómo manejan servicios como Auth0 el cierre de sesión automático en Discourse?

¿Podrías aclarar a qué te refieres con esto? ¿Cuál es la duración de la sesión en tu aplicación? ¿Cómo estás gestionando la expiración de la sesión allí?

Discourse tiene una configuración llamada maximum session age (edad máxima de la sesión), que por defecto está establecida en 1440 horas, es decir, 60 días.

En resumen: si no sabes que ha cambiado el usuario que está frente al ordenador, no hay nada que puedas hacer fácilmente para evitarlo. Podrías reducir la duración de la sesión o llamar periódicamente desde tu aplicación para cerrar la sesión de los usuarios, pero entonces, si tus usuarios permanecen en el ordenador durante periodos más largos, tendrán que volver a pasar por el flujo de autenticación.

Discourse puede extender cualquier flujo de inicio de sesión y sesión que estés utilizando actualmente, pero sin más información sobre lo anterior, es difícil identificar exactamente dónde está el problema y qué oportunidades existen.

¡Gracias por tu respuesta! Me di cuenta de que este problema, en última instancia, se trata de gestionar al usuario en el sitio principal.

Si el usuario cierra sesión manualmente en el sitio principal, entonces debo llamar a Discourse (mediante la API) para cerrar su sesión allí también.

Y si el usuario no cierra sesión pero su sesión expira, debo llamar a Discourse para cerrar su sesión allí al mismo tiempo.

Y finalmente: cuando un usuario cierra sesión en Discourse usando “Cerrar sesión” allí, debo capturar ese evento (mediante un webhook) y cerrar su sesión en mi sitio también.

¡Qué emoción, integración!