Benutzer-E-Mail über DataExplorer bestätigt

Über die API muss ich ermitteln, ob Benutzer-IDs ihre E-Mail-Adresse bereits bestätigt haben oder nicht. Mit DataExplorer befrage ich die Tabelle email_tokens, bin jedoch verwirrt darüber, wie ich mehrere Zeilen für eine bestimmte Benutzer-ID interpretieren soll. Wenn mehrere Zeilen vorhanden sind, haben N-1 davon expired = true, aber die Zeile mit expired = false scheint nicht den aktuellen Status der E-Mail-Bestätigung widerzuspiegeln. Beispielsweise gibt es verifizierte Benutzer, bei denen die Zeile in email_tokens mit expired = false confirmed = false anzeigt.

Ich gehe das wahrscheinlich falsch an. Bitte geben Sie mir einen Rat. Vielen Dank!

@michebs, ist es möglich, dies mit einer Data Explorer-Abfrage zu verfolgen?

Hallo David,

Wenn der Benutzer die E-Mail bestätigt, wird die Spalte confirmed aktualisiert. Indem du sie als true in den Filter aufnimmst, erhältst du nur bestätigte E-Mails.

Hoffentlich hilft dir das weiter.

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

Was möchtest du erreichen?

@michebs - Ja. Das ist die Abfrage, die ich zunächst versucht habe, aber ich habe festgestellt, dass es eine kleine Teilmenge unserer Benutzer gibt, die aktive Benutzer sind, aber nicht von dieser Abfrage zurückgegeben werden. Wenn ich jedoch einen dieser Benutzer auf der Seite „Benutzerverwaltung“ betrachte, ist ihre E-Mail-Adresse gültig (wird nicht als nicht verifiziert markiert).

@pfaffman - Wir nutzen diese Daten, um einen der Zustandsübergänge in den Diensten zu steuern, die wir unseren Mitgliedern sowohl auf der Website anbieten. Wenn sich ein neues Mitglied anmeldet und Dienste anfordert, möchten wir zunächst sicherstellen, dass wir sie für die Bereitstellung dieser Dienste kontaktieren können.

Um ein Beispiel zu zeigen, liefert diese Abfrage:

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

Bei einem unserer aktivsten Benutzer ergibt sich folgendes Ergebnis:

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

Die einzige nicht abgelaufene Zeile zeigt die E-Mail als nicht bestätigt an.

Wenn Sie die Kontrolle über Ihr System haben, können Sie einen Discourse-Webhook verwenden, um Ihr System darüber zu benachrichtigen, dass der Benutzer aktiviert wurde. Aber ich bin mir ziemlich sicher, dass die einfache Lösung darin besteht, das Feld active im Benutzerdatensatz zu prüfen. Ich bin mir ziemlich sicher, dass es erst gesetzt wird, nachdem die E-Mail-Adresse bestätigt wurde.

http://localhost:3000/admin/users/1/jay.json liefert einen Datensatz wie diesen:

{
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 sieht genau nach dem aus, was ich brauche. Vielen Dank!