DataExplorer で確認されたユーザーメールを確認

API を通じて、ユーザーID がすでにメールアドレスを確認しているかどうかを判断する必要があります。DataExplorer を使用して email_tokens テーブルをクエリしていますが、特定のユーザーID に対して複数の行がある場合の解釈方法がわかりません。複数の行がある場合、N-1 の行は expired = true となっていますが、expired = false の行は、ユーザーがメールアドレスを確認したかどうかの現在の状態を表していないように見えます。例えば、確認済みのユーザーであっても、expired = falseemail_tokens 行で confirmed = false となっているケースがあります。

おそらく、このアプローチは間違っているのでしょう。ご助言をお願いします。よろしくお願いいたします。

@michebs さん、Data Explorer クエリでこれを追跡することは可能でしょうか?

こんにちは、David さん、

ユーザーがメールを確認すると confirmed カラムが更新されるため、フィルターに true を追加することで、確認済みのメールのみをリスト表示できます。

参考になれば幸いです。

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

何を達成しようとしていますか?

@michebs - はい。これは最初に試したクエリですが、このクエリでは返されないアクティブなユーザーの小さなサブセットが存在することがわかりました。しかし、そのユーザーの一人を管理ユーザーページで確認すると、メールアドレスは有効であり(「未確認」としてフラグが立てられていません)。

@pfaffman - このデータは、サイト上で会員に提供するサービスのステート遷移の 1 つを駆動するために使用しています。新しい会員が登録してサービスを利用申請した場合、まずその会員に連絡してサービスを提供できるかどうかを確認する必要があります。

例として、以下のクエリをご覧ください:

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

最もアクティブなユーザーの一人を確認すると、以下の結果が返されます:

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

有効な(expired が false の)行は 1 つのみで、その行のメールは未確認(confirmed が false)となっています。

システムを制御できる場合は、Discourse の Web フックを使用して、ユーザーがアクティブ化されたことをシステムに通知することもできます。しかし、簡単な解決策は、ユーザーレコードの active フィールドを確認することだと確信しています。このフィールドは、メールアドレスが検証されるまで設定されないはずです。

http://localhost:3000/admin/users/1/jay.json をアクセスすると、以下のようなレコードが返されます:

{
"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 はまさに私が探していたもののようです。ありがとうございます!