Как сделать кастомную авторизацию в Django
1️⃣ Как кратко ответить
Для создания кастомной авторизации в Django, необходимо определить собственную модель пользователя, унаследовав её от AbstractBaseUser или AbstractUser. Затем, нужно настроить менеджер пользователей и обновить настройки аутентификации в settings.py. Это позволяет гибко управлять полями и поведением пользователя, адаптируя их под специфические требования проекта.
2️⃣ Подробное объяснение темы
Django предоставляет систему аутентификации "из коробки", но иногда стандартной функциональности недостаточно. Например, если вам нужно добавить дополнительные поля в модель пользователя или изменить логику аутентификации. В таких случаях на помощь приходит кастомная авторизация.
Зачем это нужно?
Кастомная авторизация позволяет:
- Добавлять дополнительные поля в модель пользователя (например, дату рождения, аватар).
- Изменять логику аутентификации (например, использовать email вместо имени пользователя).
- Интегрировать сторонние системы аутентификации.
Как это работает?
Шаг 1: Создание кастомной модели пользователя
Для начала, создадим свою модель пользователя. Мы можем унаследовать её от AbstractBaseUser для полной кастомизации или от AbstractUser, если хотим добавить только несколько полей.
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.db import models
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
if not email:
raise ValueError('The Email field must be set')
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password=None, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
return self.create_user(email, password, **extra_fields)
class CustomUser(AbstractBaseUser):
email = models.EmailField(unique=True)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
objects = CustomUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name']
def __str__(self):
return self.email
Шаг 2: Настройка settings.py
После создания модели, нужно указать Django использовать её вместо стандартной модели пользователя. Для этого в settings.py добавляем:
AUTH_USER_MODEL = 'myapp.CustomUser'
Шаг 3: Обновление форм и админки
Если вы используете Django Admin, нужно зарегистрировать новую модель пользователя:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser
class CustomUserAdmin(UserAdmin):
model = CustomUser
list_display = ['email', 'first_name', 'last_name', 'is_staff']
fieldsets = (
(None, {'fields': ('email', 'password')}),
('Personal info', {'fields': ('first_name', 'last_name')}),
('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser')}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'first_name', 'last_name', 'password1', 'password2'),
}),
)
ordering = ('email',)
admin.site.register(CustomUser, CustomUserAdmin)
Шаг 4: Миграции
Не забудьте создать и применить миграции для новой модели:
python manage.py makemigrations
python manage.py migrate
Применение
Теперь у вас есть кастомная модель пользователя, которую можно расширять и изменять по мере необходимости. Это позволяет создавать более гибкие и адаптированные под ваши нужды системы аутентификации.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться