Пользовательский бэкэнд аутентификации, который может поддерживать неуникальные имена пользователей [закрыто]

Как мне настроить модель аутентификации, чтобы установить unique=False в поле, заданном в USERNAME_FIELD?

# models/user.py
class User(SafeDeleteModel, PermissionsMixin):
    id = models.UUIDField("아이디", primary_key=True, default=uuid.uuid4)
    email = models.EmailField("이메일", max_length=255)
    name = models.CharField("이름", max_length=255)
    provider = models.CharField("소셜 계정 제공 서비스", max_length=100, null=True, blank=True, default=None, editable=False)
    provider_id = models.CharField("소셜 계정 고유 식별자", max_length=255, null=True, blank=True, default=None, editable=False)
[enter image description here](https://i.stack.imgur.com/nDev8.png)
    USERNAME_FIELD = "email"

class CustomBackend(ModelBackend):

    def authenticate(self, request, password=None, **kwargs):
        username = kwargs.get("username", None)
        if username is None:
            username = kwargs.get("email")
        if username is None or password is None:
            return
        try:
            print("UserModel._default_manager : ", UserModel._default_manager)
            user = UserModel._default_manager.get_by_natural_key(username)
        except UserModel.DoesNotExist:
            # Run the default password hasher once to reduce the timing
            # difference between an existing and a nonexistent user (#20760).
            UserModel().set_password(password)
        else:
            if user.check_password(password) and self.user_can_authenticate(user):
                return user

    def get_user(self, user_id):
        try:
            user = UserModel._default_manager.get(pk=user_id)
        except UserModel.DoesNotExist:
            return None
        return user if self.user_can_authenticate(user) else None
# settings/base.py
AUTHENTICATION_BACKENDS = ["app.settings.backend.CustomBackend"]

Согласно вышеприведенному официальному документу django Я унаследовал ModelBackend и создал пользовательский бэкенд.

[wanrring]введите описание изображения здесь

Вернуться на верх