Erro de autenticação do Google

Olá,

Sou novo no Discourse. Criei um fórum recentemente e agora estou no processo de migrar o site e o fórum para um novo nome de domínio.

Domínio antigo do fórum: https://forum.skymail.app (inativo, redireciona para o novo site)

Novo domínio: https://forum.sugarmail.app (operacional)

Estou com problemas na autenticação do Google. Tenho um projeto no Google Cloud e, após mudar para o novo domínio, alterei também a URL de redirecionamento no Client ID lá, então atualmente está configurado como:

https://forum.sugarmail.app/auth/google_oauth2/callback

Agora, o problema. Ao tentar “cadastrar com o Google”, recebo este erro no Discourse:

https://forum.sugarmail.app/auth/failure?message=csrf_detected A autorização expirou ou você trocou de navegador. Por favor, tente novamente.

Quando o fórum estava sob o domínio antigo, forum.skymail.app, a autenticação do Google funcionava sem problemas.

Fiz o ./launcher rebuild app após alterar o domínio, garantindo que atualizei o domínio no app.yaml em DISCOURSE_HOSTNAME (na verdade, o fórum não carregava de forma alguma até que eu fizesse isso).

Alguma dica, por favor?

Normalmente, ao iniciar o fluxo de login, o cookie _forum_session é definido no seu navegador. No entanto, no seu site, isso não parece estar acontecendo.

Você tem algum plugin ou proxy que possa estar interferindo nos cookies do seu site?

Obrigado pela resposta.

Plugins - não, não estou usando nenhum. A única coisa que fiz após a instalação foi ativar a autenticação do Google (client id e secret) e habilitar “sempre usar https”.

Proxies - estou usando o nginx como proxy reverso (que também serve o site principal do aplicativo).

    # discourse
    location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass_request_headers on;
            proxy_pass http://localhost:10080;
    }

e em containers/app.yaml

expose:
  - "10080:80"   # http
  - "10443:443" # https

O Let’s Encrypt nas configurações do Discourse não está ativado. Portanto, o nginx dentro do container está servindo HTTP puro, e o nginx externo faz a terminação SSL.

Essa configuração é quase a mesma que eu tinha com o domínio antigo; a única diferença é o “force https”.

Estou executando a versão 2.6.0.beta3.

Ah, que pena, é “forçar HTTPS”, que eu tinha desativado anteriormente.

Ativei recentemente para evitar o aviso no Chrome sobre “conteúdo de página inseguro”, que ocorria devido a links HTTP simples para imagens.

Para reforçar, eu faço a terminação SSL no nginx “externo” e, no que diz respeito ao próprio Discourse, não há SSL.

Desativar “forçar HTTPS” faz com que a autenticação do Google volte a funcionar (tive que adicionar uma URL de redirecionamento HTTP simples no projeto do Google Cloud).

Mas isso não é bom, pois haverá avisos de “site inseguro” ou conteúdo misto assim que houver imagens.

Existe uma maneira de manter a autenticação do Google funcionando com “forçar HTTPS” e terminação SSL fora do Discourse?

( Eu usaria o próprio suporte a SSL do Discourse, exceto que ele assume que “possui” o domínio, então eu precisaria configurar um endereço IP adicional para este VPS e separar o site principal e o fórum… o que é um pouco trabalhoso… )

Certifique-se de enviar X-Forwarded-Proto: https.

Obrigado, @riking. Copiei o bloco do nginx do seu link exatamente como estava e, em seguida, ativei a opção “forçar HTTPS”, conforme recomendado pelo console de administração do Discourse.

Meu fórum está de volta no ar e funcionando, e a autenticação do Google está operante.

No entanto, ainda persiste um problema:

Tanto o Chrome quanto o Firefox estão exibindo avisos sobre conteúdo de página inseguro.

Ao analisar o rastreamento de rede nas ferramentas de desenvolvedor do Chrome, verifiquei que se trata deste link (HTTP simples, não HTTPS):

http://forum.sugarmail.app/uploads/default/optimized/1X/_129430568242d1b7f853bb13ebea28b3f6af4e7_2_512x512.png

Ah, esquece. Acabei de definir um novo favicon personalizado e agora ele é buscado usando https. Sem mais avisos de “conteúdo misto”.

Lindo, obrigado pela ajuda!