Как сделать пользовательскую авторизацию в django? Мне нужна авторизация администратора по имени пользователя и паролю, а пользователей - только по номеру телефона
Как я могу реализовать этот код?
админы используют только панель администратора для авторизации Пользователи не используют панель администратора, поэтому они используют только приложение для авторизации с помощью OTP-номера телефона.
from django.contrib.auth.base_user import BaseUserManager
from django.utils.translation import gettext as _
class CustomUserManager(BaseUserManager):
"""
Custom user model manager where email is the unique identifier
for authentication instead of usernames.
"""
# oddiy userlar yaratish uchun
def create_user(self, email, password, **extra_fields):
if not email:
raise ValueError(_('Users must have an email address'))
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save()
return user
# supper user yaratish uchun
def create_superuser(self, email, password, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
extra_fields.setdefault('is_active', True)
if extra_fields.get('is_staff') is not True:
raise ValueError(_('Superuser must have is_staff=True.'))
if extra_fields.get('is_superuser') is not True:
raise ValueError(_('Superuser must have is_superuser=True.'))
return self.create_user(email, password, **extra_fields)
У меня есть класс менеджера, и я просмотрел похожий код.
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth import get_user_model
class EmailBackend(ModelBackend):
def authenticate(self, request, email=None, password=None, **kwargs):
UserModel = get_user_model()
try:
user = UserModel.objects.get(email=email)
except UserModel.DoesNotExist:
return None
else:
if user.check_password(password):
return user
def get_user(self, user_id):
UserModel = get_user_model()
try:
return UserModel.objects.get(pk=user_id)
except UserModel.DoesNotExist:
return None
Я посмотрел несколько видео в youtube, но не нашел.