Проблемы с перенаправлением SSO

Я интегрирую Discourse с WordPress через плагин WP Discourse и использую WordPress в качестве провайдера Discourse Connect, однако столкнулся с проблемой: когда неаутентифицированный пользователь заходит на инстанс Discourse и нажимает любую кнопку, требующую входа, он попадает в бесконечный цикл перенаправлений.

Желаемое поведение: пользователь нажимает кнопку входа в Discourse → перенаправляется на страницу входа в WordPress → проходит аутентификацию и возвращается на ту страницу Discourse, где был до этого. В настоящее время проблем нет, если пользователь уже аутентифицирован и заходит на инстанс Discourse после входа. Эта ошибка возникает, когда неаутентифицированный пользователь сначала заходит на инстанс Discourse.

Текущее поведение: пользователь нажимает кнопку входа в Discourse перенаправляется на https://[инстанс-discourse]/session/sso?return_path=%2Ft%2F[страница-discourse, где был пользователь]%2F16 перенаправляется на https://[сайт-wordpress]/?sso=[токен SSO]%3D%3D&sig=[токен подписи] перенаправляется на https://[сайт-wordpress]/?sso=[токен SSO]%3D%3D&sig=[токен подписи]&redirect_to=%2F%3Fsso%[токен SSO]%253D%253D%26sig%3D[токен подписи] и цикл продолжается рекурсивно, пока браузер не выдаст ошибку «слишком много перенаправлений».

Мне не удалось найти тему с решением этой проблемы; ближайшая из них —

но у нас везде включен SSL, и эта ошибка возникает во всех браузерах. Есть ли какие-либо предложения по исправлению этой проблемы?

В Chrome 97 была выпущена ошибка, связанная с обработкой файлов cookie при перенаправлениях, которая в некоторых случаях может нарушить работу DiscourseConnect. Пока мы ждем, когда Google выпустит исправление, мы добавили обходное решение в Discourse. Обновление вашего сайта Discourse до последней версии должно решить проблему. Попробуйте это и сообщите нам, поможет ли это.

(Обходное решение было добавлено в этом коммите)

Спасибо за ответ. Я только что проверил, что у нас установлена последняя версия, но, к сожалению, ошибка всё ещё сохраняется. Мы размещаем наш форум на Discourse, поэтому он должен обновляться автоматически. Ошибка остаётся такой же, как и раньше. Есть ли что-то ещё, что я мог бы попробовать? Возможно, какие-то настройки в хостинге Discourse могут вызывать эту проблему?

Привет @dbwhite, не могли бы вы, пожалуйста:

  1. включить «Подробные логи DiscourseConnect» в настройках «DiscourseConnect» плагина WP Discourse;
  2. повторить проблему;
  3. перейти в раздел «Логи» плагина WP Discourse и «скачать» их.

Затем отправьте мне логи в личное сообщение, и я внимательно изучу, что происходит. Обратите внимание, что логи не содержат никакой личной информации или секретов.

@angus, @dbwhite одной из возможных причин проблемы может быть использование на сайте WordPress плагина Woocommerce. Woocommerce добавляет перенаправление при входе, которое может вызывать проблемы с DiscourseConnect. Эти перенаправления можно исправить, установив и активировав плагин GitHub - scossar/wp-discourse-woocommerce-support: Integrates the wp-discourse plugin with WooCommerce · GitHub, либо добавив фрагменты кода, указанные в README этого плагина, в тему сайта.

Проблема с перенаправлением, описанная здесь, кажется похожей на те, с которыми я сталкивался ранее на других сайтах с Woocommerce. В таких случаях проблема решалась установкой плагина WordPress, на который я дал ссылку.

Если это действительно причина проблемы, интересно, стоит ли нам рассмотреть возможность добавления поддержки Woocommerce непосредственно в плагин WP Discourse.

Это было бы чрезвычайно полезно.

У меня нет точно такой же проблемы, как описал автор темы, но я уперся в стену при попытке перенаправлять наших пользователей обратно на то место, где они находились в форумах Discourse, после входа в систему :disappointed_face:

Установка и активация плагина поддержки WooCommerce для WP Discourse решает эту проблему для вас?

Просто хотел опубликовать здесь обновление: оказалось, что один из используемых нами плагинов влиял на возвращаемое значение функции wp_login_url() WordPress. После удаления этого плагина всё заработало как ожидалось!