Verificar e-mail do usuário confirmado via DataExplorer

Por meio da API, preciso determinar se os IDs de usuário já confirmaram ou não seu endereço de e-mail. Usando o DataExplorer, estou consultando a tabela email_tokens, mas estou confuso sobre como interpretar múltiplas linhas para um determinado ID de usuário. Quando há várias linhas, N-1 delas têm expired = true, mas a linha com expired = false não parece refletir o estado atual de confirmação do e-mail do usuário. Por exemplo, existem usuários verificados cuja linha em email_tokens com expired = false mostra confirmed = false. Provavelmente estou abordando isso da maneira errada. Por favor, oriente-me. Obrigado!

@michebs, é possível rastrear isso usando uma consulta do Data Explorer?

Olá David,

Quando o usuário confirma o e-mail, a coluna confirmed é atualizada. Portanto, ao adicioná-la como true no filtro, você listará apenas e-mails confirmados.

Espero que isso ajude.

SELECT 
    user,	
    email 
FROM email_tokens
WHERE 
    expired = false
    AND confirmed = true

O que você está tentando alcançar?

@michebs - Sim. Esta é a consulta que tentei primeiro, mas descobri que há um pequeno subconjunto de nossos usuários que são usuários ativos, mas não são retornados por esta consulta. No entanto, ao examinar um desses usuários na página de Administração de Usuários, o e-mail deles é válido (não está marcado como não verificado).

@pfaffman - Usamos esses dados para impulsionar uma das transições de estado nos serviços que fornecemos aos nossos membros, tanto no site. Quando um novo membro se cadastra e solicita serviços, queremos primeiro saber que podemos entrar em contato com eles para fornecer esses serviços.

Para ilustrar um exemplo, com esta consulta:

SELECT
  e.user_id,
  e.expired,
  e.confirmed,
  e.email
FROM email_tokens as e
WHERE e.user_id = 33

Ao consultar um dos nossos usuários mais ativos, o resultado é:

user_id,expired,confirmed,email
33,false,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,true,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,true,somebody@somewhere.com

A única linha não expirada mostra o e-mail como não confirmado.

Se você tiver controle sobre o seu sistema, poderá usar um webhook do Discourse para notificar seu sistema de que o usuário foi ativado. Mas tenho quase certeza de que a solução mais simples é verificar o campo active no registro do usuário. Tenho quase certeza de que ele só é definido após a validação do endereço de e-mail.

http://localhost:3000/admin/users/1/jay.json retornará um registro como:

{
id: 1,
username: "jay",
name: "Jay User",
avatar_template: "/user_avatar/localhost/jay/{size}/3_2.png",
email: "jay@nowehre.invalid",
secondary_emails: [ ],
active: true,
admin: true,
moderator: false,
last_seen_at: "2020-11-04T20:13:04.240Z",
last_emailed_at: null,
created_at: "2020-10-05T21:14:52.570Z",
last_seen_age: 27.86773951,
last_emailed_age: null,
created_at_age: 2588319.53785305,
trust_level: 1,
.....
},

users.active parece ser exatamente o que eu preciso. Obrigado!