Пользовательский бэкэнд аутентификации, который может поддерживать неуникальные имена пользователей [закрыто]
Как мне настроить модель аутентификации, чтобы установить 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]введите описание изображения здесь