Erro de login

Olá a todos! Um dos meus usuários do fórum não conseguiu usar sua conta para fazer login no fórum em nosso site e recebeu este erro. Não há problema com outras contas de usuário, mas apenas com a dele. Pensei que talvez pudesse ser resolvido atualizando o fórum para a versão mais recente, mas o problema ainda persiste.
Vocês têm alguma ideia? Agradeço qualquer ajuda.

2 curtidas

Há algo de especial na sua configuração de login, ou neste usuário em particular? Acho que já vi erros semelhantes relacionados a contas de administrador anteriormente, mas quanto mais informações você puder fornecer, melhor. :+1:

Você está vendo algum erro em seus /logs?

2 curtidas

Obrigado pela sua resposta!
Você quer dizer os logs em /var/discourse/shared/standalone/log/rails?

Em qual log tal erro é registrado?
production.log ou production_errors.log

o segundo está vazio.

1 curtida

Eu quis dizer os logs em [SeuSite]/logs, ou possivelmente se algo aparece no console do navegador quando eles tentam fazer login? Pode haver algum detalhe extra lá que possa ajudar a reduzir o problema.

Eles são um usuário não-funcionário e você tem algum SSO habilitado?

1 curtida

Sim, acho que todos os usuários podem fazer login com o SSO, pois eles não precisam inserir conta e senha novamente para fazer login no fórum. Eles são transferidos diretamente do site para o fórum.

Este é um erro no console:

E este é um possível log de erro na web:
ActiveRecord::RecordInvalid (a validação falhou: o e-mail principal já foi adotado) app/models/discourse_connect.rb:270:in block in match_email_or_create_user' lib/distributed_mutex.rb:53:in block in synchronize’ lib/distributed

2 curtidas

Eu acho que parece que este usuário em particular tem um e-mail diferente no Discourse do que no seu site principal. Você poderia verificar isso para confirmar?

1 curtida

Sim, acabei de verificar o e-mail mostrado no painel do usuário do Discourse e o e-mail em nosso site principal, eles são os mesmos.

2 curtidas

Eu dei uma olhada e uma possível razão pode ser que o e-mail deles acidentalmente tenha entrado na sua lista de bloqueados. Você pode pesquisar e ver se é esse o caso na sua página /admin/logs/screened_emails. Se você encontrá-lo lá, desbloqueá-lo pode resolver. :+1: (também vale a pena verificar o IP deles em /admin/logs/screened_ip_addresses também)

Se esse não for o caso, outra possibilidade é que eles tinham uma conta no fórum antes de você habilitar o SSO. Qual SSO você está usando?

1 curtida

Verifiquei /admin/logs/screened_ip_addresses e está vazio.

Desculpe, não entendi o que você quis dizer. (“Qual SSO você está usando?”) Existem muitos tipos de SSO?

1 curtida

Eu estava me perguntando se você usou o Discourse Connect ou outra coisa, e com o que você o conectou para fornecer sua autenticação de usuário (WordPress, por exemplo).

Já vimos esse erro antes, fiz uma busca em nosso sistema de chamados.

Isso acontece quando você tem

  • require activation definido como true
  • um usuário U1 no Discourse com um endereço de e-mail específico, possivelmente com ID externo A.
  • um usuário U2 no lado do provedor DiscourseConnect com o mesmo endereço de e-mail e um ID externo diferente (B)

O usuário faz login, o Discourse verifica se existe um usuário com o ID externo B, ele não existe.
Normalmente, o Discourse fará uma correspondência por e-mail como próximo passo, mas como require activation está definido, o endereço de e-mail não é confiável e ele pula essa etapa e não associará ao usuário U1, pois permitiria o sequestro de conta.
Portanto, o Discourse decide criar um novo usuário. Isso falha porque o usuário U1 já existe com esse endereço de e-mail.

Seria bom se houvesse um erro melhor caso o e-mail exista, mas não seja confiável. Também não tenho certeza por que ele mostra um erro genérico do Rails.

Resoluções:

  • se seus endereços de e-mail no lado do provedor DiscourseConnect forem verificados e puderem ser confiáveis, defina require activation como false.
    ou
  • altere o ID externo do usuário U1 para B
    ou
  • altere o endereço de e-mail do usuário U1 para outra coisa

Adicionando o texto “a alteração que você queria foi rejeitada” para que este tópico seja encontrado quando alguém pesquisar por este erro.

7 curtidas

Sim, estamos usando o Discourse Connect e ele está conectado ao nosso site.

Muito obrigado pela sua resposta detalhada! Os endereços de e-mail em nosso site são verificados quando o usuário faz login. Portanto, tentarei corrigir o problema com o método 1 primeiro. Mas nas configurações de administrador, não encontrei onde está “exigir ativação por e-mail”.

É um parâmetro retornado durante o processo de SSO, veja Disable email verification for SSO - #4 by simon

Para sites que usam o plugin WP Discourse para autenticação, os administradores do site também podem marcar endereços de e-mail para usuários individuais como verificados na página de preferências do usuário:

Isso é mais seguro e fácil do que desativar a verificação de e-mail para todos os usuários no site.

Eu me pergunto quando isso começou a acontecer. Tenho certeza de que o cenário que você está descrevendo costumava gerar esta mensagem de erro: “Há um problema com sua conta. Entre em contato com o administrador do site.”

Aqui está outro caso de um validador Rails falhando que retorna este erro, e tem 6,5 anos. No contexto do DiscourseConnect, isso é algo que vimos apenas nos últimos meses.

1 curtida

Estamos usando a imagem do discourse, então devemos apenas adicionar require_activation=true em env:?

Obrigado pela ajuda, mas não usamos WP. Estamos usando a imagem docker do discourse. A maneira correta de configurá-lo é adicionando require_activation=true em env: do arquivo app.yml?

Não, veja Login error - #17 by RGJ como postado anteriormente, você precisa passar este parâmetro por usuário. Isso requer alterá-lo em seu código do lado do servidor se for uma implementação personalizada.

1 curtida