Встречается на собеседованиях • сегодня

Как сделать кастомную авторизацию в Django

Для создания кастомной аутентификации в Django можно использовать AbstractBaseUser или AbstractUser.

  1. Настройка модели пользователя:
    python
    from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
    
    class CustomUserManager(BaseUserManager):
        def create_user(self, email, password=None, **extra_fields):
            if not email:
                raise ValueError('Email is required')
            user = self.model(email=self.normalize_email(email), **extra_fields)
            user.set_password(password)
            user.save(using=self._db)
            return user
    

class CustomUser(AbstractBaseUser):
email = models.EmailField(unique=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)

text
   USERNAME_FIELD = 'email'
   objects = CustomUserManager()
text

2. **Обновление `settings.py`**:  
```python
AUTH_USER_MODEL = 'myapp.CustomUser'
  1. Кастомный бэкенд аутентификации (если нужно):

    python
    from django.contrib.auth.backends import BaseBackend
    from .models import CustomUser
    
    class CustomAuthBackend(BaseBackend):
        def authenticate(self, request, email=None, password=None):
            try:
                user = CustomUser.objects.get(email=email)
                if user.check_password(password):
                    return user
            except CustomUser.DoesNotExist:
                return None
  2. Добавьте бэкенд в AUTHENTICATION_BACKENDS:

    python
    AUTHENTICATION_BACKENDS = ['myapp.backends.CustomAuthBackend']

Также можно переопределить формы (UserCreationForm, UserChangeForm) и использовать их в админке.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы