Cuando el usuario está en la aplicación externa, hace clic en un botón de inicio de sesión y es redirigido a través del flujo del proveedor SSO de Discourse, y luego de vuelta a la aplicación externa. Esa aplicación externa puede almacenar una sesión con los datos del usuario. Cuando el usuario cierra sesión en Discourse, el webhook puede eliminar la sesión de la aplicación externa. No estoy seguro, pero creo que el encabezado del webhook es X-Discourse-Event: user_logged_out.
Edición: el cierre de sesión desde el sitio externo se realiza mediante la API de Discourse.
En lugar de preguntar a Discourse si un usuario ha iniciado sesión, puedes consultar la aplicación externa. En mi caso, esto sirve para cosas como eliminar el botón de inicio de sesión en el sitio externo.
Puedo verificar mi código más tarde. No lo he revisado en un tiempo, pero creo que hacía algo así.