Можно войти в систему как суперпользователь, но не как обычный пользователь

я создал суперпользователя и зарегистрировал других пользователей. но войти в систему можно только как суперпользователь, а когда я пытаюсь войти как обычный пользователь, он выдает "Неверный номер телефона или пароль". Может ли кто-нибудь помочь мне с этим

models.py

class CustomUserManager(BaseUserManager):
    def create_user(self, phone_number, email=None, name=None, password=None, **extra_fields):
        if not phone_number:
            raise ValueError('The phone number must be set')
        email = self.normalize_email(email) if email else None
        user = self.model(phone_number=phone_number, name=name, email=email, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, phone_number, email=None, name=None, password=None, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        return self.create_user(phone_number, email, name, password, **extra_fields)

class CustomUser(AbstractBaseUser, PermissionsMixin):
    phone_number = models.CharField(unique=True, max_length=20)
    name = models.CharField(max_length=150, default='')
    email = models.EmailField(unique=True, blank=True, null=True)
    is_active = models.BooleanField(default=True)
    is_superuser=models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    date_joined = models.DateTimeField(default=timezone.now)

    objects = CustomUserManager()

    USERNAME_FIELD = 'phone_number'
    EMAIL_FIELD = 'email'

    def __str__(self):
        return self.phone_number

views.py

@api_view(['POST'])
def login_api(request):
    if request.method == 'POST':
        serializer = LoginSerializer(data=request.data)
        if serializer.is_valid():
            phone_number = serializer.validated_data.get('phone_number')
            password = serializer.validated_data.get('password')

            user = authenticate(request, phone_number=phone_number, password=password)
            
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return Response({'message': 'Login successful'})
                else:
                    return Response({'error': 'User account is disabled'}, status=status.HTTP_401_UNAUTHORIZED)
            else:
                return Response({'error': 'Invalid phone number or password'}, status=status.HTTP_401_UNAUTHORIZED)
        
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    
    return Response({'error': 'Method not allowed'}, status=status.HTTP_405_METHOD_NOT_ALLOWED)

settings.py

AUTH_USER_MODEL='detectapp.CustomUser'

Я сделал пользовательскую модель для входа в систему с помощью номера телефона. Но не смог решить эту проблему.

Сначала этот пример вообще не работает:

name = models.CharField(max_length=150, default='') # not null=True

в create_user, create_superuser вы даете name=None, а пользователь не может быть сохранен. Вы получили ошибку: NOT NULL constraint failed: detectapp_customuser.name

На секо

Вернуться на верх