Facebook Login Error: CSRF detected

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.

Очевидно, что в этой строке была опечатка с символом $, из-за чего она не работала.