我在Django中使用UserModel和UserCreationForm。但是,我不想使用用户名,而是想使用客户的电子邮件作为登录信息(即完全绕过/忽略用户名字段)。如何将客户的电子邮件作为Django的UserCreationForm/User Model中的用户名?
- 我怎么去让用户名字段是在用户模型
- 如何打开电子邮件到客户的“用户名”可选?反过来,我如何使这个电子邮件领域被要求呢?
我在Django中使用UserModel和UserCreationForm。但是,我不想使用用户名,而是想使用客户的电子邮件作为登录信息(即完全绕过/忽略用户名字段)。如何将客户的电子邮件作为Django的UserCreationForm/User Model中的用户名?
1.)只需在您的表单中输入用户名字段,然后在电子邮件中删除'@'后,将模型作为用户名传递。
2)创建一个自定义的认证后端(这将接受用户名或电子邮件):
from django.contrib.auth.models import User
class EmailOrUsernameModelBackend(object):
def authenticate(self, username=None, password=None):
if '@' in username:
kwargs = {'email': username}
else:
kwargs = {'username': username}
try:
user = User.objects.get(**kwargs)
if user.check_password(password):
return user
except User.DoesNotExist:
return None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
CHAGE您进行相应的设置:在[接受电子邮件地址作为用户名的
AUTHENTICATION_BACKENDS = (
'myoursite.backends.EmailOrUsernameBackend', # Custom Authentication to accept usernamee or email
)
很酷,谢谢!我只是从你的帖子中得到了另一个想法。而不是输入用户名,我怎样才能得到它,以便电子邮件中@符号之前的所有内容(例如:[email protected]中的goelv)变成用户名?这是我在视图中处理的事情吗?我是新手,感谢您的帮助! – goelv 2012-08-13 17:29:02
那么,这不是很现实....如果两个用户有电子邮件地址[email protected]和[email protected],他们不能有相同的用户名 – 2012-08-13 17:33:38
我正在一个系统的第一部分将是独一无二的,所以它可能是可行的 – goelv 2012-08-13 17:37:17
可能重复Django](http://stackoverflow.com/questions/778382/accepting-email-address-as-username-in-django) – 2012-08-13 17:19:11