通过 DataExplorer 检查用户电子邮件是否已确认

通过 API,我需要确定用户 ID 是否已确认其电子邮件地址。在使用 DataExplorer 查询 email_tokens 表时,我对如何解释给定用户 ID 的多行数据感到困惑。当存在多行时,其中 N-1 行的 expired 值为 true,但 expired 为 false 的那一行似乎并不能反映该用户是否已确认电子邮件地址的当前状态。例如,有些已验证用户的 email_tokens 表中,expired 为 false 的行却显示 confirmed 为 false。

我可能搞错了方法。请给予指导,谢谢!

@michebs 是否可以通过 Data Explorer 查询来跟踪这一点?

你好,David,

当用户确认邮箱后,confirmed 列会被更新。因此,在过滤条件中添加 true,你只会列出已确认的邮箱

希望这能帮到你。

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

您想达成什么目标?

@michebs - 是的。这是我最初尝试的查询,但发现有一小部分活跃用户并未被该查询返回。然而,查看其中一位用户的“管理员用户”页面时,他们的邮箱是有效的(并未被标记为“未验证”)。

@pfaffman - 我们利用这些数据来驱动我们在网站上为会员提供的服务中的状态转换之一。当新会员注册并请求服务时,我们首先需要确认能够联系到他们以提供这些服务。

以该查询为例:

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

唯一未过期的行显示该邮箱尚未确认。

如果您能控制系统,可以使用 Discourse Webhook 通知您的系统用户已激活。但我相当确定,最简单的解决方案是检查用户记录中的 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 看起来正是我需要的。谢谢!