Как сделать кастомную авторизацию в Django
Python
Middle
Без компании
Как сделать кастомную авторизацию в Django
Ответы
Для создания кастомной аутентификации в Django можно использовать `AbstractBaseUser` или `AbstractUser`.
- **Настройка модели пользователя**:
```
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)
USERNAME_FIELD = 'email'
objects = CustomUserManager()
```
- **Обновление `settings.py`**:
```
AUTH_USER_MODEL = 'myapp.CustomUser'
```
- **Кастомный бэкенд аутентификации** (если нужно):
```
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
```
- **Добавьте бэкенд в `AUTHENTICATION_BACKENDS`**:
```
AUTHENTICATION_BACKENDS = ['myapp.backends.CustomAuthBackend']
```
Также можно переопределить формы (`UserCreationForm`, `UserChangeForm`) и использовать их в админке.