我可以在django-auth中使用电子邮件地址作为用户名吗?

时间:2011-09-27 00:08:02

标签: django django-authentication

我想在使用Django的auth模块时使用电子邮件地址作为各种伪用户名。我可以这样做吗? User.username限制为30个字符,对于较长的电子邮件地址,这实际上是不可接受的。我知道User对象也有email_address属性,但我不确定这是用于身份验证。问题是username 必需,但是太短,我的应用程序无法使用。对于我的应用程序,诸如用户名之类的假名没有任何意义,所以我不知道如何才能使这项工作成功。有没有办法做我正在谈论的事情?

1 个答案:

答案 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)