У меня возникли проблемы с авторизацией через Google. У меня есть проект в Google Cloud, и после перехода на новый домен я также изменил URL перенаправления в разделе Client ID. Сейчас он установлен как:
Теперь о проблеме. При попытке «войти через Google» в Discourse появляется следующая ошибка:
https://forum.sugarmail.app/auth/failure?message=csrf_detected Авторизация истекла по времени, или вы сменили браузер. Пожалуйста, попробуйте снова.
Когда форум находился на старом домене forum.skymail.app, авторизация через Google работала без проблем.
После смены домена я выполнил команду ./launcher rebuild app, обязательно обновив домен в файле app.yaml в переменной DISCOURSE_HOSTNAME (на самом деле форум вообще не загружался, пока я этого не сделал).
Обычно при запуске процесса входа в систему в вашем браузере устанавливается cookie _forum_session. Однако на вашем сайте этого, похоже, не происходит.
Есть ли у вас какие-либо плагины или прокси, которые могут мешать работе cookie на вашем сайте?
Плагины — нет, я их не использую. Единственное, что я сделал после установки, — это включил аутентификацию через Google (client ID и secret) и активировал опцию «всегда использовать HTTPS».
Прокси — я использую nginx в качестве обратного прокси (он также обслуживает основной сайт приложения).
Let’s Encrypt в настройках Discourse не включён. Таким образом, nginx внутри контейнера обслуживает обычный HTTP, а внешний nginx выполняет завершение SSL.
Это практически такая же конфигурация, как и на старом домене; единственное отличие — «принудительный HTTPS».
Ох, черт, это “принудительный https”, который я ранее отключил.
Я недавно включил его, чтобы избежать предупреждения в Chrome о “небезопасном содержимом страницы”, которое возникало из-за ссылок на изображения через обычный http.
Чтобы повторить: я выполняю SSL-терминацию во внешнем nginx, и насколько я знаю, в самом Discourse SSL не используется.
Отключение “принудительного https” снова делает аутентификацию Google рабочей (мне пришлось добавить URL перенаправления через обычный http в проекте Google Cloud).
Но это не хорошо, потому что как только появятся изображения, появятся предупреждения о “небезопасном сайте” / смешанном содержимом.
Есть ли способ сохранить работу аутентификации Google с включенным “принудительным https” и SSL-терминацией вне Discourse?
(Я бы использовал собственную поддержку SSL в Discourse, но она предполагает, что он “владеет” доменом, поэтому мне пришлось бы настроить дополнительный IP-адрес для этого VPS и разделить основной сайт и форум… что немного утомительно… )
Спасибо, @riking! Я скопировал блок nginx из вашей ссылки дословно, а затем включил «принудительный HTTPS», как рекомендовано в консоли администратора Discourse.
Мой форум снова работает, и авторизация через Google функционирует.
Однако одна проблема всё ещё сохраняется:
И Chrome, и Firefox выдают предупреждения о небезопасном содержимом страницы.
При просмотре сетевого трафика в инструментах разработчика Chrome обнаруживается эта ссылка (обычный HTTP, а не HTTPS):
А, ладно. Я просто установил новую пользовательскую иконку сайта, и теперь она загружается через https. Больше нет предупреждений о «смешанном содержимом».