joshm
(Josh)
26.Март.2019 12:43:14
1
Hi!
My users cannot log in with Facebook anymore. This is the error log:
(facebook) Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected
I’m using Cloudflare in front of nginx. I’m using Cloudflare automatic SSL (flexible). I didn’t install any certificate on my server (i.e. I’m not using Letsencrypt).
Is this related to Cloudflare? Can this be solved without installing Letsencrypt?
Thanks!
Эта ошибка похожа и для Google, и для Facebook. В моей конфигурации в nginx была строка:
# proxy_set_header X-Forwarded-Proto $https;
После того как я изменил её на
proxy_set_header X-Forwarded-Proto $scheme;
ошибка исчезла.
Решение было найдено после прочтения этой темы: Redirect URI mismatch in Google Auth
Мне нужно улучшить свой ответ.
После экспериментов с авторизацией через Facebook и Google я остановился на входе через Office365 из-за корпоративной политики.
Когда я переместил сервер Discourse за прокси (см. изображение ниже), авторизация O365 перестала работать. Требуется включение опции force https, но за прокси эта опция не работает. К счастью, проблему решил Daniel: Moved site behind proxy, favicon and header not using https anymore - #11 by rossierd .
Строка в конфигурации Internal Nginx
proxy_set_header X-Forwarded-Proto $scheme;
doлжна быть заменена на
proxy_set_header X-Forwarded-Proto "https";
External Nginx не требует подобных изменений. В нём установлено:
proxy_set_header X-Forwarded-Proto $scheme;
Вероятно, то же самое справедливо для Facebook, Google и других типов авторизации.
P.S.
Очевидно, что в этой строке была опечатка с символом $, из-за чего она не работала.