Вход через соцсети работает только на десктопе, но не на мобильных устройствах (обнаружен CSRF)

Здравствуйте,
в моём форуме Discourse возникла проблема с социальными входами (Google, Discord, LinkedIn):

  • На рабочем столе все социальные входы работают безупречно.

  • На всех мобильных устройствах (iOS/Android, Safari/Chrome/Firefox) они не работают.

Процесс на мобильных устройствах:

  1. Социальный вход открывается как обычно.

  2. После перенаправления обратно на мой сайт я попадаю только на главную страницу, но не авторизован.

В логах каждый раз указано:

(google_oauth2) Authentication failure! csrf_detected

или

(discord) Authentication failure! invalid_credentials: invalid_request

Что я уже проверил:

  • Настройка OAuth верна (на рабочем столе работает)

  • Очистил куки/кэш на устройствах

  • Проверил настоящие браузеры, без встроенных браузеров приложений

  • Неважно, какой мобильный браузер — всегда обнаруживается CSRF

Вопрос:
Что в Discourse может привести к тому, что социальные входы только на мобильных устройствах теряют сессию/куки и завершаются с ошибкой csrf_detected?

Спасибо за любую помощь! :folded_hands:


Это стандартная установка? Если нет, включена ли у вас опция force_https?

Привет, да, это стандартная установка Discourse (установлена на сервере Hetzner).

Я нашёл решение проблемы, при которой социальные логины (Google, Discord и т. д.) на мобильных устройствах не работают с ошибкой csrf_detected, хотя на ПК всё функционирует корректно.

Причина крылась в моей теме:

Собственный JavaScript-скрипт в секции <head> темы постоянно перезагружал страницу (window.location.replace) на мобильных устройствах.

Этот принудительный редирект уничтожал временный CSRF-токен, необходимый для валидации сессии после обратного вызова от Google/Discord.

Решение:

Я удалил весь скрипт, отвечающий за принудительное отображение мобильной версии, из темы.

Если у вас возникли похожие проблемы и вы используете кастомную тему, проверьте, нет ли там скриптов, вызывающих редиректы. В моём случае виновником был именно он!