Erro de Login do Facebook: CSRF detectado

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!

Esse erro é semelhante tanto para o Google quanto para o Facebook. Na minha configuração, havia uma linha no nginx:

# proxy_set_header X-Forwarded-Proto $https;

Após alterá-la para

proxy_set_header X-Forwarded-Proto $scheme;

o erro desapareceu.

A solução foi encontrada após ler este tópico: Redirect URI mismatch in Google Auth

Preciso melhorar minha resposta.

Depois de brincar com a autenticação do FB e do Google, fiquei no login do Office365 por causa da política da empresa.

Quando movi meu servidor discourse para trás de um proxy (veja a imagem abaixo), a autenticação do O365 ficou indisponível. Ele precisa que o force https esteja ativado e essa opção está quebrada atrás do proxy. Resolvido, graças a Daniel: Moved site behind proxy, favicon and header not using https anymore - #11 by rossierd.

A linha na configuração interna do Nginx

proxy_set_header X-Forwarded-Proto $scheme;

deve ser substituída por

proxy_set_header X-Forwarded-Proto "https";

O Nginx externo não precisa de tal modificação. Ele tem:

proxy_set_header X-Forwarded-Proto $scheme;

Provavelmente o mesmo vale para FB, Google e outros tipos de autenticação.

P.S.

Obviamente essa string continha um erro de digitação $ e foi inútil.