我想在使用Django的auth模块时使用电子邮件地址作为各种伪用户名。我可以这样做吗? User.username
限制为30个字符,对于较长的电子邮件地址,这实际上是不可接受的。我知道User
对象也有email_address
属性,但我不确定这是用于身份验证。问题是username
必需,但是太短,我的应用程序无法使用。对于我的应用程序,诸如用户名之类的假名没有任何意义,所以我不知道如何才能使这项工作成功。有没有办法做我正在谈论的事情?
答案 0 :(得分:3)
以编程方式生成username
并为auth后端创建子类以支持电子邮件:
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
class CustomAuthBackend(ModelBackend):
def authenticate(self, email=None, password=None, username=None,
*args, **kwargs):
try:
user = User.objects.get(email=email)
if user.check_password(password):
return user
except User.DoesNotExist:
pass
# fallback to login + password
return super(CustomAuthBackend, self).authenticate(username=username,
password=password,
*args, **kwargs)