Não foi possível confirmar o novo e-mail quando os códigos de backup de autenticação em duas etapas estão ativados

Quando os códigos de backup de autenticação de dois fatores estão ativados, a confirmação de um novo endereço de e-mail falha com o seguinte erro:

Ops

O software que alimenta este fórum de discussões encontrou um problema inesperado. Pedimos desculpas pelo inconveniente.

Informações detalhadas sobre o erro foram registradas e uma notificação automática foi gerada. Vamos analisá-la.

Nenhuma ação adicional é necessária. No entanto, se o erro persistir, você pode fornecer detalhes adicionais, incluindo os passos para reproduzir o erro, criando um tópico de discussão na categoria de feedback do site.

Isso ocorre em várias instalações do Discourse, portanto, não é específico de uma única configuração.

Desativar o recurso códigos de backup de autenticação de dois fatores resolve o problema, e a verificação de e-mail é concluída com sucesso.

Passos completos para reproduzir o problema:

  • Comece com uma conta em qualquer instalação do Discourse (pode usar https://try.discourse.org/ para testes)
  • Configure a 2FA com TOTP (não foi testado com chaves de segurança físicas)
  • Altere o e-mail da sua conta
  • Clique no e-mail de verificação enviado para a nova caixa de entrada. Observe que a verificação é concluída com sucesso.
  • Ative os códigos de backup de autenticação de dois fatores nas configurações de 2FA.
  • Altere o e-mail da conta novamente.
  • Clique no e-mail de verificação enviado para a caixa de entrada mais recente. Observe que a verificação falha com o erro mencionado anteriormente.
  • Desative os códigos de backup de autenticação de dois fatores.
  • Altere o e-mail novamente.
  • Clique no e-mail de verificação enviado para o endereço mais recente.
  • Você será solicitado a inserir o código TOTP.
  • Desta vez, a verificação do e-mail mais recente é concluída com sucesso.
4 curtidas

Você verificou /logs no seu navegador da web, enquanto estava logado como administrador, para ver qual é o erro real? Acredito que teríamos visto isso em nossos sites se fosse um bug real.

Além disso, isso é com chaves de segurança ou tokens TOTP? Independentemente disso, precisaremos de etapas específicas de reprodução aqui (seja em um ambiente de desenvolvimento ou no try.discourse.org) para que possamos confirmar.

3 curtidas

Só para dar minha contribuição, não parece ter havido nenhum erro relevante registrado nos fóruns do Caddy.

2 curtidas

Obrigado por interligar os tópicos!

Bom ponto. Isso acaba sendo um problema apenas quando os códigos de backup de autenticação em dois fatores estão ativados. Atualizei o post com os novos detalhes e os passos para reproduzir.

1 curtida

O que acham desses passos de reprodução, @tshenry? A sequência parece um pouco estranha para mim.

1 curtida

Eu não quis dizer que o e-mail precisa ser atualizado várias vezes. A ideia é indicar que a verificação do e-mail falha apenas quando os códigos de backup estão ativados, e não em outras situações.

Definitivamente há um bug aqui. Para refinar um pouco os passos para reprodução:

  1. Configure a 2FA com TOTP
  2. Ative os códigos de backup
  3. Altere o endereço de e-mail
  4. Selecione o link de verificação no e-mail de confirmação
  5. Seja redirecionado para a página “Ops”

Posso confirmar que desativar os códigos de backup resolve imediatamente o problema, mesmo ao usar o mesmo link de verificação por e-mail.

O log de erro mostra:

ActionView::Template::Error (Missing partial common/_second_factor_form_script with {:locale=>[:en_US, :en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby]}. Searched in:
  * "/var/www/discourse/app/views"
)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.1/lib/action_view/path_set.rb:48:in `find'

O que, acredito eu, está relacionado a esta linha aqui: https://github.com/discourse/discourse/blob/master/app/views/users_email/confirm.html.erb#L36

Que referencia um arquivo que de fato está ausente: discourse/app/views/common at main · discourse/discourse · GitHub

8 curtidas

Obrigado @arun — devemos corrigir isso @eviltrout

4 curtidas

Isso foi corrigido neste commit:

7 curtidas