Dmi*_*kov 19 email authentication django
好吧,对于每个使用Django并经常被新手询问的人来说,这个很明显,但是我想说清楚并讨论是否有其他方法可以做到这一点.现在最流行和最方便的方法是在用户名字段中存储电子邮件,因为Django 1.2允许"@","_"和" - "字符,但这种方式存在以下问题:
max_length=30
属性限制,对于电子邮件来说这是非常小的.即使你重写表单验证,DB将有varchar(30)
代替EmailField
的varchar(75)
,除非你手动改变你的表.User.email_user()
正常工作.我认为在User.email
使用时还有其他一些地方.另一种方法可能是使用email
字段进行身份验证,将其传递给您的身份验证后端,但它仍然存在问题:
authenticate(self, email=None, password=None)
Run Code Online (Sandbox Code Playgroud)
User.email
没有unique=True
属性,这意味着你的数据库不会有索引,使你的电子邮件查找速度变得很慢.username
字段,它unique=True
通过从表中完全删除它或改变它以允许NULL并删除索引.恢复,两种方式都是邪恶的,并且需要在syncdb之后执行特定于DB的代码,如果您需要与DB无关的应用程序,这是不可接受的.
我打包了django-email-as-username,如果你想要删除用户名,并且只使用电子邮件,它应该可以满足你所需要的一切.
简要概述是:
在引擎盖下,用户名是电子邮件的哈希版本,最终意味着我们不仅限于Django的用户名30字符限制(只是常规电子邮件75字符限制.)
编辑:从Django 1.5开始,您应该考虑使用自定义用户模型而不是'django-email-as-username'包.
大卫克拉默想出了一个我喜欢的问题的解决方案.我目前在生产网站上使用它,用户必须能够使用他们的电子邮件或用户名登录.你可以在这里找到它:
如果表单上提供的登录名是电子邮件(包含"@"符号),它将尝试对其进行身份验证,如果不是电子邮件,则会返回用户名.(当然,您只需要确保您的注册表格能够收集这项工作的电子邮件.)
归档时间: |
|
查看次数: |
4065 次 |
最近记录: |