Verificar correo electrónico del usuario confirmado a través de DataExplorer

A través de la API, necesito determinar si los identificadores de usuario ya han confirmado su dirección de correo electrónico o no. Usando DataExplorer, estoy consultando la tabla email_tokens, pero tengo dudas sobre cómo interpretar múltiples filas para un mismo identificador de usuario. Cuando hay varias filas, N-1 de ellas tienen expired = true, pero la fila con expired = false no parece reflejar el estado actual de si han confirmado su correo electrónico. Por ejemplo, hay usuarios verificados cuya fila en email_tokens con expired = false muestra confirmed = false. Probablemente estoy abordando esto de la manera incorrecta. Por favor, orientenme. ¡Gracias!

@michebs, ¿es posible rastrear esto mediante una consulta de Data Explorer?

Hola David,

Cuando el usuario confirma el correo electrónico, se actualiza la columna confirmed, por lo que al agregarla como true en el filtro, solo listarás correos electrónicos confirmados.

Espero que esto ayude.

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

¿Qué estás intentando lograr?

@michebs - Sí. Esta es la consulta que intenté primero, pero descubrí que hay un pequeño subconjunto de nuestros usuarios que son activos, pero que no aparecen en esta consulta. Sin embargo, al revisar uno de esos usuarios en su página de Administración de Usuarios, su correo electrónico es válido (no está marcado como no verificado).

@pfaffman - Utilizamos estos datos para impulsar una de las transiciones de estado en los servicios que brindamos a nuestros miembros, tanto en el sitio. Cuando un nuevo miembro se registra y solicita servicios, queremos saber primero que podemos contactarlo para ofrecerle esos servicios.

Para mostrar un ejemplo, con esta consulta:

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

Al consultar uno de nuestros usuarios más activos, se obtiene:

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,true,somebody@somewhere.com

La única fila no expirada muestra el correo electrónico como no confirmado.

Si tienes control sobre tu sistema, podrías utilizar un webhook de Discourse para notificar a tu sistema que el usuario ha sido activado. Pero estoy bastante seguro de que la solución más sencilla es verificar el campo active en el registro del usuario. Estoy casi seguro de que no se establece hasta que el usuario haya validado su dirección de correo electrónico.

http://localhost:3000/admin/users/1/jay.json te devolverá un registro como este:

{
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 exactamente lo que necesito. ¡Gracias!