Я полагаю, происходит следующее: когда вы переходите по маршруту, например https://forum.example.com/session/sso?return_path=/t/some-slug/23, Discourse перенаправляет вас на discourse connect url, независимо от того, авторизованы ли вы в Discourse или нет. Это происходит здесь:
Ожидается, что сайт провайдера SSO обработает случай пользователей, которые уже авторизованы на сайте. Вот как это делает плагин WP Discourse:
Этот код (часть после оператора else) обрабатывает случай пользователей, уже авторизованных в WordPress. Их перенаправляют обратно на URL, указанный в параметре запроса return_path. Таким образом, с точки зрения пользователя, их сразу же перекидывает на URL возврата, но на самом деле происходит перенаправление на сайт провайдера SSO, а затем обратно в Discourse.
Мне кажется, что проблема на вашем сайте заключается в том, что ваш код SSO не обрабатывает случай пользователей, уже авторизованных на сайте.
У меня сейчас нет возможности протестировать это. Возможно, я неправильно читаю код. До того как посмотреть на код, я думал, что на стороне Discourse выполняется проверка, авторизован ли пользователь в Discourse, но, похоже, всё работает не так.