Tramite l’API, ho bisogno di determinare se gli ID utente hanno già confermato il proprio indirizzo email o meno. Utilizzando DataExplorer, sto interrogando la tabella email_tokens, ma sono confuso su come interpretare più righe per un determinato ID utente. Quando ci sono più righe, N-1 di esse hanno expired = true, ma la riga con expired = false non sembra riflettere lo stato attuale della conferma dell’indirizzo email. Ad esempio, ci sono utenti verificati la cui riga in email_tokens con expired = false mostra confirmed = false. Probabilmente sto affrontando la questione nel modo sbagliato. Vi chiedo un consiglio. Grazie!
@michebs è possibile tracciare questo tramite una query di Data Explorer?
Ciao David,
Quando l’utente conferma l’email, la colonna confirmed viene aggiornata; quindi, aggiungendola come true nel filtro, otterrai solo email confermate.
Spero che questo ti sia d’aiuto.
SELECT
user,
email
FROM email_tokens
WHERE
expired = false
AND confirmed = true
Cosa stai cercando di ottenere?
@michebs - Sì. Questa è la query che ho provato per prima, ma ho scoperto che esiste un piccolo sottoinsieme di utenti attivi che non vengono restituiti da questa query. Tuttavia, guardando uno di questi utenti nella pagina Amministratori Utenti, la loro email è valida (non è contrassegnata come non verificata).
@pfaffman - Utilizziamo questi dati per gestire una delle transizioni di stato nei servizi che offriamo ai nostri membri, sia sul sito. Quando un nuovo membro si iscrive e richiede servizi, vogliamo prima sapere che possiamo contattarlo per fornire tali servizi.
Per fare un esempio, con questa query:
SELECT
e.user_id,
e.expired,
e.confirmed,
e.email
FROM email_tokens as e
WHERE e.user_id = 33
Osservando uno dei nostri utenti più attivi, otteniamo:
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
L’unica riga non scaduta mostra l’email come non confermata.
Se hai il controllo sul tuo sistema, potresti utilizzare un webhook di Discourse per notificare al tuo sistema che l’utente è stato attivato. Ma sono quasi certo che la soluzione più semplice sia controllare il campo active nel record dell’utente. Sono quasi certo che non venga impostato fino a quando non avranno convalidato il proprio indirizzo email.
http://localhost:3000/admin/users/1/jay.json restituirà un record simile a:
{
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 sembra proprio quello che mi serve. Grazie!