Написание пользовательской аутентификации пользователя с помощью электронной почты с использованием django
Этот код предназначен для создания пользовательской аутентификации, которая принимает email и пароль для входа в систему вместо имени пользователя и пароля.
Каждый раз, когда я использую "python manage.py createsuperuser" и ввожу свои данные, я всегда получаю сообщение об ошибке, которое гласит: "return self._create_user(email, password, first_name, last_name, mobile, password, **extra_fields) TypeError: CustomUserManager._create_user() принимает 6 позиционных аргументов, но было задано 7"
Как мне это сделать
models.py
from django.db import models
from datetime import datetime
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
class CustomUserManager(BaseUserManager):
def _create_user(self, email, password, first_name, last_name, mobile, **extra_fields):
if not email:
raise ValueError("Email must be provided")
if not password:
raise ValueError("Password must be provided")
user = self.model(
email = self.normalize_email(email),
first_name = first_name,
last_name = last_name,
mobile = mobile,
**extra_fields,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, password, first_name, last_name, mobile, **extra_fields):
extra_fields.setdefault("is_active", True)
extra_fields.setdefault("is_staff", True)
extra_fields.setdefault("is_superuser", False)
return self._create_user(email, password, first_name, last_name, mobile, password, **extra_fields)
def create_superuser(self, email, password, first_name, last_name, mobile, **extra_fields):
extra_fields.setdefault("is_active", True)
extra_fields.setdefault("is_staff", True)
extra_fields.setdefault("is_superuser", True)
return self._create_user(email, password, first_name, last_name, mobile, password, **extra_fields)
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(db_index=True, unique=True, max_length=254)
first_name = models.CharField(max_length=250)
last_name = models.CharField(max_length=250)
mobile = models.CharField(max_length=50)
address = models.CharField(max_length=250)
is_staff = models.BooleanField(default=True)
is_superuser = models.BooleanField(default=True)
is_superuser = models.BooleanField(default=False)
objects = CustomUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name', 'mobile']
class Meta:
verbose_name = "User"
verbose_name_plural = "Users"
settings.py
AUTH_USER_MODEL = "myappname.User"
Это важные части кода.
Вы дважды посылаете password
в _create_user()
в create_user()
методе
return self._create_user(email, password, first_name, last_name, mobile, password, **extra_fields)