Inscrições fantasma (dois usuários com a mesma conta após a migração)

Olá, tenho enfrentado um problema que começou há várias atualizações do Discourse: recebo notificações de que há um novo usuário aguardando aprovação, mas ao verificar, a fila de revisão está vazia.

Isso ocorre apenas quando um único usuário solicita aprovação. Se várias pessoas estiverem aguardando, consigo ver todas menos uma na fila — mas sempre há uma que não aparece.

Em outras palavras, muitas pessoas têm sido incapazes de se cadastrar.

Em um tópico separado, foi sugerido que o plugin de seleção múltipla possa estar de alguma forma envolvido, fazendo com que o Discourse adicione um a mais ao comprimento da fila.

No geral, isso parece improvável, já que algo deve estar ocorrendo para disparar uma notificação em alguns dias e não em outros. Além disso, o problema não começou quando o plugin foi instalado — ele surgiu alguns meses depois, e só consigo correlacioná-lo a uma atualização do Discourse (já que não acredito que tenham sido feitos outros plugins ou alterações desde então).

Alguém mais já passou por isso? E qual poderia ser a solução?

Por mera coincidência, @jjaffeux, é possível que a correção “FIX: torna a análise de valores mais resiliente” que você aplicou a este plugin possa estar relacionada a esse problema?

Então, esse plugin está relacionado ou baseado apenas na funcionalidade principal do Discourse? Não estou claro.

Olá - Também não estou claro. Poderia ser ambos?
O problema não começou quando o plugin foi instalado pela primeira vez, mas sim há algumas atualizações do núcleo. Se o plugin estiver envolvido de alguma forma, talvez haja alguma interação não intencional?

Não posso realmente testar a desinstalação do plugin para ver se o problema persiste, pois ele é crítico para a missão: a verificação de inscrições de usuários depende das respostas que só podem ser fornecidas com este plugin ativo (os usuários precisam fazer seleções em uma lista suspensa).

GitHub - procourse/discourse-multiselect-user-field · GitHub na verdade não deveria ser um plugin, pois contém apenas JavaScript.

Acho que minha primeira recomendação aqui seria esperar pelo “estado ruim”… depois, ative o modo seguro do seu navegador e veja se a fila está funcionando corretamente.

Se parecer tudo certo no modo seguro, provavelmente você deve postar no Marketplace para pedir que o plugin seja convertido em um componente de tema e atualizado com os padrões mais recentes do Discourse.

1 curtida

Oi, obrigado, Sam.

Infelizmente, o resultado é o mesmo no modo seguro: em resposta a uma notificação de usuários pendentes, ainda falta um na fila para ser revisado, mesmo quando acesso no modo seguro do Discourse com todos os três itens de personalização do site desativados.

O que isso sugere?

Possivelmente, precisamos de um especialista em fila de revisão para analisar este tópico. Vou sinalizá-lo e alguém entrará em contato com você nos próximos dias.

Os passos exatos para reproduzir o problema seriam incrivelmente úteis.

Obrigado, Sam.
É muito difícil identificar os passos exatos — não tenho certeza do que fiz que possa ser incomum, e não consigo vincular o início do problema a nenhum evento específico.

Na minha opinião, os principais suspeitos são uma atualização do Discourse ou uma atualização do plugin de seleção múltipla por @j.jaffeux em 14 de março para “tornar a análise de valores mais resiliente”.

O problema é que as novas inscrições são tão intermitentes que podem passar semanas sem nenhuma, de modo que a causa e o efeito podem estar muito distantes no tempo.

Você consegue reproduzir o problema usando o modo anônimo do Chrome e criando contas falsas?

Acho que preciso indicar um endereço de e-mail válido para que uma aplicação sequer chegue à fila?

Não tenho nenhum endereço de e-mail que não tenha sido usado para testes — todos já possuem contas.

Se você tem Gmail, pode usar o endereçamento com + … jane+algo@gmail.com vai para jane@gmail.com

OK, isso foi interessante. Tentei usar minha conta do Gmail como descrito acima, mas, mesmo acessando a página do Gmail em outra janela do navegador e aguardando o e-mail de verificação gerado pelo Discourse, recebi uma notificação no meu e-mail normal de administrador sobre um novo cadastro para revisão (e a fila continuava vazia, como antes). Eu havia digitado o endereço errado, então nunca recebi o e-mail na minha conta do Gmail e, por isso, nunca verifiquei.

Portanto, a menos que isso seja uma coincidência, talvez as notificações de administrador estejam antecipando-se ao processo? Embora isso não explique por que TODA notificação envolvia exatamente uma pessoa faltando na fila — presumivelmente, nem sempre haverá uma falha na verificação do endereço de e-mail de um único candidato e não dos demais.

** Edição

Posteriormente, corrigi meu endereço do Gmail naquela janela de cadastro anônimo e reenviei o e-mail de verificação, que então apareceu na minha janela do navegador do Gmail. Consegui verificar com sucesso usando o URL de verificação em outra janela anônima. Nenhuma notificação subsequente foi enviada ao meu e-mail de administrador, então só posso supor que a primeira notificação estava, de fato, associada a essa nova tentativa de cadastro.

Usando mais uma janela do navegador, visitei o site novamente no modo de segurança, entrei como administrador e vi a mesma fila, ainda com uma pessoa para revisão — mas, desta vez, minha nova conta de teste estava visível e podia ser aprovada.

Algo disso esclarece o problema?

Para dar continuidade: tentei novamente e criei uma nova conta fictícia por meio de uma janela anônima (com o endereço correto na primeira tentativa) — essa tentativa funcionou conforme o esperado, e ao responder à notificação enviada por e-mail ao administrador por meio de uma janela de navegador comum, vi que o novo usuário estava visível na fila.

Repeti o processo com um novo cadastro por meio de uma janela padrão, respondendo à notificação também por uma janela padrão (sem modo anônimo ou modo seguro em nenhum momento) — e, novamente, tudo funcionou como deveria. Portanto, o problema (ou talvez dois problemas: a notificação ao administrador antes mesmo da verificação do endereço de e-mail pelo candidato, e o não aparecimento da candidatura incompleta ou concluída na fila) restringiu-se à primeira tentativa.

Mais uma vez, não tenho certeza se isso traz muita clareza, mas talvez, após uma primeira tentativa de cadastro ser comprometida pelo sistema (gerando uma notificação fantasma), as tentativas subsequentes funcionem normalmente? Será que o sistema retorna ao modo de falha após um período suficiente sem novas atividades de cadastro?

Olá @Paul_King

Suspeito que uma migração que adicionei por volta da mesma época do commit que você mencionou tenha causado esse problema, fazendo com que alguns usuários não aprovados pareçam estar na fila de revisão e gerando notificações estranhas.

Você poderia executar esta consulta no explorador de dados para confirmar que esse é o caso?

SELECT COUNT(*)
FROM users
INNER JOIN reviewables r ON r.target_id = users.id
WHERE r.type = 'User' AND r.status = 1 AND users.approved = FALSE
1 curtida

Olá, Roman.

Acabei de executar e, assumindo que fiz corretamente (veja a captura de tela), a contagem foi zero

No entanto, minha instalação do Discourse também não está mostrando nenhum usuário aguardando no momento.
Acabei de criar outra conta fictícia e confirmei o endereço, mas até agora nenhuma notificação foi enviada para meu e-mail de administrador. Ao fazer login novamente no site como administrador, executei a consulta novamente e a contagem voltou a ser zero, mas desta vez o Discourse relata (corretamente) que há um usuário aguardando revisão

Normalmente, os e-mails de notificação para usuários aguardando revisão chegam quase imediatamente ao meu endereço de administrador, então tenho quase certeza de que este nunca foi enviado. Agora, quase o problema oposto!

*EDIT - Acabei de receber uma notificação de que DOIS usuários estavam aguardando revisão (após um atraso incomum). Ainda assim, o pequeno ícone vermelho ao lado do menu hambúrguer mostrava o número ‘1’, e ao clicar para revisar a fila, apareceu apenas meu próprio cadastro de usuário fictício acima - que eu aprovei, e o Discourse indicou que não havia mais usuários para revisar

Depois disso, executei a consulta novamente - e a contagem foi zero.

1 curtida

Desculpe, percebi que a cláusula WHERE está incorreta. Deve ser r.type = 'ReviewableUser' em vez de User.

Você pode executar esta em vez dela?

SELECT COUNT(*)
FROM users
INNER JOIN reviewables r ON r.target_id = users.id
WHERE r.type = 'ReviewableUser' AND r.status = 1 AND users.approved = FALSE
1 curtida

Oi, Roman

Acabei de receber outra mensagem fantasma. Ao ler sua última mensagem, executei a nova consulta — mesmo resultado: count=0

Então tem que ser outra coisa. Vou investigar.

3 curtidas

Olá @Paul_King,

Você poderia verificar se seu site possui usuários não aprovados sem um objeto revisável associado? Tenho tentado reproduzir esse bug até agora sem sucesso.

Aqui está uma consulta para fazer isso:

SELECT COUNT(*) 
FROM users u
LEFT JOIN reviewables r ON r.target_id = u.id AND r.type = 'ReviewableUser'
WHERE approved = false AND r.id IS NULL

Além disso, tente:

SELECT COUNT(*) FROM users WHERE approved = false AND active = true
1 curtida

Oi, obrigado, Roman.

Aqui está o resultado da primeira consulta:

Não tenho certeza se é relevante, mas há muitas postagens importadas de um grupo Yahoo extinto que foi o precursor do fórum atual — elas foram mescladas por questões de continuidade e pesquisabilidade. Os criadores dessas postagens antigas (que datam do início dos anos 2000) muitas vezes não possuem contas no fórum atual.

Abaixo, os resultados da segunda consulta:

Isso foi muito interessante — como alguém pode ter uma conta não aprovada e ainda assim estar ativo? A menos que seja eu, como administrador? Como posso ajustar a consulta para identificar esse usuário?

Isso significa apenas que ela está aguardando aprovação.

SELECT * FROM users WHERE approved = false AND active = true

O nome de usuário será um link para o perfil do usuário. Após identificá-lo, você pode compartilhar a data created_at? Gostaria de saber se mudamos algo em torno dessa data.