Могу ли я использовать адреса электронной почты в качестве имен пользователей в django-auth? - PullRequest
1 голос
/ 27 сентября 2011

Я хотел бы использовать адреса электронной почты в качестве псевдопользовательского имени при использовании модуля авторизации Django. Я могу это сделать? User.username ограничено 30 символами, что на самом деле недопустимо для длинных адресов электронной почты. Я знаю, что объект User также имеет свойство email_address, но я не уверен, что это для аутентификации. Проблема в том, что username - это , обязательное , но оно слишком короткое для моего приложения, чтобы его можно было использовать. Для моего приложения псевдоним, такой как имя пользователя, не имеет никакого смысла, поэтому я не знаю, как это сделать. Есть ли способ сделать то, о чем я говорю?

1 Ответ

3 голосов
/ 27 сентября 2011

Генерация username программно и создание подкласса аутентификационного бэкэнда для поддержки писем:

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)
...