Мой код для этого ещё не запущен, но если пользователь перенаправляется через другой сервер (где Discourse выступает провайдером единого входа), то на этом внешнем сервере будет создана сессия. Я создал там маршрут, например /auth/is-authenticated, который возвращает статус пользователя. Он в основном нужен для того, чтобы скрывать кнопки «Войти», когда пользователь уже авторизован. Когда пользователь выходит из Discourse, я думаю, что вебхук также выводит его из системы на другом сервере. Я давно не проверял код, но, насколько я помню, именно так я всё настроил.