0
我如何改变“用户名密码登陆”到“电子邮件地址和密码登录” Django的注册我怎么改变“用户名密码登陆”到“电子邮件地址和密码登录” Django的注册
我如何改变“用户名密码登陆”到“电子邮件地址和密码登录” Django的注册我怎么改变“用户名密码登陆”到“电子邮件地址和密码登录” Django的注册
你无法轻松地在django.contrib.auth.model.User
的用户名字段中存储电子邮件,因此您需要一个不同的auth后端。将以下内容添加到AUTHENTICATION_BACKENDS
。见http://docs.djangoproject.com/en/dev/topics/auth/#writing-an-authentication-backend
from django.contrib.auth.models import User
class EmailBackend(object):
""" Authenticates against the email field of django.contrib.auth.models.User
"""
def authenticate(self, email=None, password=None):
# Try using the email if it is given
if email:
for user in User.objects.filter(email=email):
if user.check_password(password):
return user
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
然后,在你的意见,通过调用django.contrib.auth.authenticate
认证。
有两点需要注意:
AUTHENTICATION_BACKEND
那里,特别是如果你想使用Django管理。的保存方法设置的用户名某处(例如,在您的新用户表单):
import uuid, binascii
username = binascii.b2a_base64(uuid.uuid4().bytes)
+1“你不能轻松存储电子邮件”。 User.username字段a)只有30个字符,对于某些电子邮件来说不够长,并且b)它要求名称与'\ w +'匹配,这不允许诸如'@'或'。'之类的内容。如果你只想专注于电子邮件地址,这确实会造成使用者名称(因为它是必需的)的问题。我建议使电子邮件变得流畅(例如[email protected] => foo_bar_com),修剪为30个字符并存储(但要准备处理意外的碰撞)。用户永远不会看到它,并且您的身份验证后端将完全忽略它。 – 2010-01-24 18:20:53
在1.2中,您可以使用电子邮件登录 – yanchenko 2010-03-31 04:00:36
更多内容:1.2现在允许电子邮件中的字符用于用户名(请参阅http://code.djangoproject.com/changeset/12634)。正如提交信息所承认的那样,它不是一个完整的解决方案,因为最大长度仍然只有30个字符。 – 2010-04-01 05:35:52