【问题标题】:Should I store duplicate email addresses?我应该存储重复的电子邮件地址吗?
【发布时间】:2016-09-12 15:00:12
【问题描述】:

想想我的 Nodejs/MongoDB 应用程序的注册流程,并想知道我是否真的需要在用户注册时检查电子邮件地址是否已经在数据库中。

我让我的用户通过点击我将发送给他们的电子邮件来验证他们的电子邮件地址。他们必须在登录之前执行此操作。一旦他们点击了这个链接,我就会在数据库中将该电子邮件标记为verified。考虑到这一点,我认为是否有人使用相同的电子邮件地址(无论出于何种原因)注册并不重要,因为除非他们可以访问电子邮件帐户,否则它不会被标记为 verified

但是,我想知道在通过电子邮件地址在数据库中搜索用户时,它是否会影响性能。例如,用户使用电子邮件地址登录。在这种情况下,是否建议同时在 emailverified 上创建索引?

我是否忽略了一些可能是安全漏洞的东西?

【问题讨论】:

    标签: node.js authentication registration


    【解决方案1】:

    就性能而言,这可能无关紧要(您可能已经在 email 字段上有一个索引),但我认为您无论如何都不应该允许它。

    一方面,它有可能将垃圾添加到您的数据库中。其次,它允许现有用户使用相同的电子邮件地址创建第二个帐户(无论是否错误),这可能会导致各种问题。

    您没有给出允许重复电子邮件地址的具体原因,但实施重复检查并不是那么耗时(您也可以考虑在 email 上设置唯一索引,因此当有人尝试重新注册现有地址时,数据库将引发错误。

    【讨论】:

    • 一些有趣的点,谢谢 - 用户将无法创建第二个帐户,因为如果电子邮件地址经过验证,那么电子邮件将无法注册。关于“垃圾”问题,我认为这总是一个问题。我还可以清除在一定时间内未验证的帐户。我的方法的一个原因是它可以阻止人们/机器注册不属于他们的电子邮件并阻止其他用户。
    • @tommyd456 如果这是您关心的问题,您可以允许尝试注册“待定”地址(已注册但尚未验证的地址)的人要求确认 e-邮件将再次发送。
    • 是的,这就是我的问题中verified 的意思。所以你认为大量用户不会出现性能问题?
    • @tommyd456 如果您的索引设置正确,则对单个电子邮件地址运行查询可能不会产生多于几条记录(如果您会允许重复的地址被注册)。如果我们谈论的是数百万用户,那么您可能应该考虑尽量减少数据库中的“垃圾”数量。不过,我可能会自己在email 上设置一个唯一 索引。
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2011-05-19
    • 2019-04-28
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多