No entanto, após clicar no botão Autorizar, o usuário é redirecionado e encontra esta mensagem em nosso fórum:
e o erro no topo deste tópico aparece nos logs do administrador.
Sinto que li e tentei de tudo para consertar isso, mas continua acontecendo. Certifiquei-me de que o ID do Cliente e o Segredo do Discord nas configurações do site estão corretos.
Também me certifiquei de que o URI tinha a sintaxe correta (com base em alguns tópicos relacionados que vi):
Eu acho(?) que reduzi o problema a uma questão de nginx e/ou cache? Deveria haver algo específico de autenticação ou CSRF definido em discourse.conf que possamos estar perdendo?
@merefield, @david, @sam - desculpem pelos pings, mas vejo seus nomes em muitas das discussões mais antigas relacionadas a csrf no passado. Vocês têm alguma recomendação para isso? Com a autenticação do Discord sendo uma parte integrada do discourse, não sei o que poderia estar causando isso.
Ainda não consigo encontrar um padrão. Às vezes funciona e me conecta corretamente, mas outras vezes sou recebido com a página csrf.
No momento, suspeito mais da última verificação de condição em verified_request?.
Existem maneiras fáceis de verificar se (valid_request_origin? && any_authenticity_token_valid?) está retornando true?
Peço desculpas pela falta de qualquer informação depurável, mas acho que fui (dolorosamente) capaz de encontrar (pelo menos o que eu acho) o problema. Ainda não tenho certeza de qual é a correção, então por favor, continue lendo
As imagens abaixo mostram uma instância consecutiva em que consegui vincular minha conta com sucesso, atualizei/tentei novamente e acertei a página de CSRF detectado sem sucesso. Eu estava em uma janela anônima e fiz/mudei literalmente nada entre a conexão bem-sucedida e a falha de CSRF. Aqui está o que eu encontrei:
Então, esta primeira imagem mostra o cookie _forum_session correspondendo em ambos os cabeçalhos de solicitação 1 e 2, o que resultou em uma conexão bem-sucedida.
No entanto, depois que recarreguei a página e tentei novamente (e falhei em conectar), você pode ver minha pesquisa no lado esquerdo mostrando apenas 1 ocorrência do cookie _forum_session em um cabeçalho de solicitação quando resultou em uma falha.
Resumindo: Tenho quase certeza de que o problema decorre do cookie forum_session no cabeçalho da solicitação discord?reconnect e, em seguida, do cabeçalho da solicitação callback? seguinte não correspondente. O que causaria a diferença entre eles?
Se eu verificar uma instância de conexão bem-sucedida (abaixo), você pode ver que a atualização ocorre apenas antes da solicitação POST discord?reconnect.
Você está recebendo esse erro em seu próprio ambiente? Acho que, de qualquer forma, esse erro precisa ser analisado pela equipe principal. Já estou há mais de 2 semanas depurando isso e ainda não encontrei uma resposta
Boa investigação! Esse tipo de condição de corrida certamente poderia causar os problemas que você está vendo.
Dito isso, não tivemos nenhum outro relato desse problema, então parece que deve ser algo específico do seu site/configuração. Quais plugins você tem instalados no site? Você pode abrir a chamada “update” e ver qual carga útil está sendo enviada?
Depois de dar uma olhada nas chamadas de atualização, acho que você está certo. Aqui estão algumas capturas de tela de solicitações de ‘atualização’ confirmadas que causaram falhas de csrf.
Estou vendo um padrão envolvendo cdn O que poderia estar mal configurado com isso? Me avise se você ainda precisa de uma lista dos nossos plugins, eu só pensei em salvar esta resposta de +1 imagem
com um de nossos plugins!
Depois de desabilitar o plugin, realizar mais testes e lançar com sucesso o recurso relacionado para a comunidade… acho que posso dizer com confiança que encontramos o culpado.
Em retrospectiva, faz sentido por que este seria o culpado - o plugin ainda está marcado como experimental e não se destina a sites de produção.
Como estou há mais de 3 semanas diagnosticando este problema e preciso voltar aos trilhos com os outros projetos de nossa comunidade , infelizmente não poderei ajudar a encontrar a solução para o plugin discourse-chat.
Se alguém acabar enviando uma correção para o plugin, nós (muito provavelmente ) consideraremos reativar o plugin em nosso site, mas por enquanto precisamos de funcionalidade estável de contas associadas do Connect.
Obrigado novamente a todos que ajudaram no diagnóstico!
Obrigado pela investigação super detalhada, @FerrariFlunker!
Acabei de fazer um PR para uma correção no core do Discourse:
O motivo pelo qual foi corrigido após a remoção do plugin de chat é que o Chat faz uso intensivo desta API ‘PresenceChannel’, e, portanto, o problema é muito mais provável de acontecer. Não acho que nenhuma alteração será necessária no chat.
Isso deve corrigir o mesmo problema com os logins do Google? Meus usuários em uma de minhas instâncias onde estávamos testando o plugin de chat adoraram, mas ele quebrou os logins do Google com o mesmo erro dos logins do Discord.