django完成邮箱验证

django complete email verification

在将此问题标记为可能重复之前,我想解决一些问题。

我想确保用户有一个名为 email 的电子邮件字段。他们还有一个 is_verified 字段来指示电子邮件是否已经过验证。

大多数电子邮件验证实施都存在一些缺陷。 假设用户创建了一个帐户并且有一个未经验证的电子邮件。不过,假设用户实际上并不拥有该电子邮件。

现在,电子邮件的实际所有者进入该站点。但是,由于电子邮件已保存在数据库中,我们收到完整性错误 - 电子邮件已在使用中。

因此,任何诈骗者都可以输入随机电子邮件并认领它。 这会降低用户体验。如何避免这种情况,从而提供完整的电子邮件验证系统? (其中实际所有者可以认领他们的电子邮件)

那么,当一个用户使用另一个用户已经拥有但未经验证的电子邮件注册时,是否应该删除现有用户?或者我们应该显示完整性错误消息吗?什么是正确的做法?

非常感谢!

是的,在注册过程中添加验证步骤非常重要。

  • 所以首先创建一个电子邮件模板并发送一封独特的电子邮件 在用户注册时向用户发送代码。实施免费电子邮件服务 从 Django 开始:

    在这里查看我的回答: How to send email via Django?

  • 比在register函数中每次生成一个随机字符串 意见通过邮件发送验证码。例如

    verifyCode = random.choice( ["a", "b", "c", "d", "x", "y", "z"]) + str(random.randint(100000, 1000000))
    
  • 创建一个临时 table 存储未经验证的用户数据并 当电子邮件验证完成后将其删除,然后将其存储在主目录中 用户 table.

  • 根据您的最后一个问题,如果用户使用未经验证的电子邮件注册,则不应将其存储在主用户 table 中。不要使用该电子邮件和用户名登录(授予访问权限)该用户到您的站点。

希望这就是你想要的。

如果您不使用电子邮件进行身份验证(因此 username_field 不是电子邮件),您可以将电子邮件字段设置为 不唯一 字段,然后当在 注册视图 或 customUserManager 中注册用户,您可以验证它是否仅对具有经过验证的电子邮件的用户唯一(因此,如果电子邮件存在并经过验证,则不要创建新用户)。

当然会有这样的情况,有人创建两个帐户(在验证其中任何一个之前)然后尝试同时验证其中两个,在这种情况下,当您第一次激活电子邮件时删除所有使用相同电子邮件地址(未验证电子邮件地址)的其他帐户。