如何设计电子邮件和用户名登录

时间:2016-04-11 12:59:19

标签: django django-forms

我有两个关于用户名和电子邮件的问题

1。我判断用户名是电子邮件,如果' @'在用户名中,然后通过以下方式验证:

email_user = User.objects.get(email__iexact=username)
authenticate(username=email_user.username)

这是你建议的好方法吗?或者你可能有更好的建议?   我知道AbstractBaseUser可以做到,但我认为使用User更合理。

2。我应该在User.email字段中存储用户的电子邮件吗?

想象一下,如果我通过以下方式注册新用户:

username: '123'
email: '456@google.com'

当我注册成功时,我发现我的电子邮件错了, 现在另一个用户的电子邮件是&#; 456 @ google.com'无法再次注册。 我只想验证可以与用户关联的电子邮件。 你的建议是什么?

2 个答案:

答案 0 :(得分:1)

如果您想使用电子邮件作为您的唯一登录密钥,如果您使用AbstractBaseUser创建自定义用户模型,则可以在您的网站未来开发中省去很多麻烦。 如果您愿意,我可以发布示例工作代码

关于第二个问题 - 您可以在Django(https://docs.djangoproject.com/ja/1.9/topics/signing/)中使用加密签名来生成密钥。进一步发送此密钥作为链接(例如www.example.com/verify/:some_crypto_key :)并将其作为用户电子邮件地址的链接发送。此密钥将包含用户标识和时间戳。如果您收到该链接上的请求,则表示该电子邮件是合法的。您可能会找到执行类似任务的程序包。

编辑: 实施(简短方法) - 当用户在您的网站上注册时,立即让他/她使用您发送给给定电子邮件的链接验证帐户。如果您在给定时间内(例如20分钟)未收到该电子邮件的回复,请删除该用户条目。这意味着在用户验证帐户之前,您无法让用户访问您的网站。

缺陷 - 考虑用户提交了错误电子邮件的情况。很明显,用户将永远无法验证它,但是对于那些20分钟,如果同时使用同一封电子邮件的实际用户尝试在您的网站上注册,他就无法访问。这是不太可能的。此外,此用户还会收到来自您网站的电子邮件,说明该用户已在网站上注册(所以在这里您可以提供其他链接,如果不是您,请点击此处&#39;那种事情)< / p>

答案 1 :(得分:0)

除非您迫切希望编写自己的custom user model,这将允许您使用电子邮件替换用户名字段,我建议您使用Django AllAuth之类的内容。它包括电子邮件验证(如您的问题中所述),并且可以设置为相当容易地使用电子邮件作为用户名。它是一个完善的图书馆,有很多支持,比滚动你自己的图书馆更容易使用。

(那就是说 - 滚动自己是一种很有启发性的体验,如果你走的那条道路,RA123就是你应该接受的答案。)

相关问题