Django REST API JWT проверка пользователя не удалась: не найдена активная учетная запись с заданными учетными данными

я использую django JWT для проверки учетной записи, но он не работает для каждого пользователя, который не является суперпользователем, но работает для суперпользователя, созданного с помощью

python manage.py createsuperuser

Вот модель для профиля пользователя

class AccountManager(BaseUserManager):
    def create_user(self, name, phone, email, password=None, **extra_fields):
        """
        Creates and saves a User with z given name,phone,email and password.
        """
        user = self.model(name=name,email=self.normalize_email(email),phone=phone)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, name, phone, email, password=None, **extra_fields):
        user = self.create_user(name, phone, email, password, **extra_fields)
        user.is_admin = True
        user.is_superuser = True
        user.is_staff = True
        return user

class Account(AbstractBaseUser):
    email = models.EmailField(verbose_name='email address',max_length=255,unique=True,)
    phone = models.CharField(max_length=15,unique=True)
    name = models.CharField(max_length=150,unique=True)
    picture = models.ImageField(blank=True, null=True)
    date_joined = models.DateTimeField(default=timezone.now)
    last_login = models.DateTimeField(null=True)
    staff = models.BooleanField(default=False)
    admin = models.BooleanField(default=False) 
    is_active = models.BooleanField(default=False)

    objects = AccountManager()

    USERNAME_FIELD = 'phone'
    REQUIRED_FIELDS = ['name', 'phone', 'email', 'password']

    def __str__(self):
        return self.name

и вот моя функция API регистрации, которая создает обычного пользователя

def signup(request):
    if request.method == 'POST':
        try:
            values = [request.POST.get('name'),request.POST.get('email'),request.POST.get('phone'),request.POST.get('password'),request.POST.get('password2')]
            user = Account.objects.create_user(name=values[0],phone=values[2],email=values[1],password=values[3])
            user.save()

            # send email verification
            current_site = get_current_site(request)
            mail_subject = 'Activate your account.'
            message = f'{current_site.domain}/account/activate/{urlsafe_base64_encode(force_bytes(user.pk))}/{account_activation_token.make_token(user)}'                       
            to_email = values[1]
            send_mail(mail_subject, message, 'youremail', [to_email])
            return JsonResponse({'success': 'User registered successfully.But need to activate account.'})
        except Exception:
            extype, exc, tb = sys.exc_info()
            print(f"\t\t****** Error *******\t\t Unexpected error at signup 73\n\t")    
            traceback.print_exception(extype, exc, tb)
            
            return JsonResponse({'error': 'error in request'})
    return JsonResponse({'error': '404: Can not access page'})

Прошу всех, кто разобрался в ошибке

Я бы прокомментировал, но у меня недостаточно репутации.

У меня была похожая проблема, и, по крайней мере для меня, проблема заключалась в том, что пароль, который хранился в базе данных, не был правильно хэширован.

Вместо:

user = Account.objects.create_user(name=values[0],phone=values[2],email=values[1],password=values[3])

Попробуйте это:

user = Account.objects.create_user(name=values[0],phone=values[2],email=values[1],password=make_password(values[3]))

make_password может быть импортирован следующим образом:

from django.contrib.auth.hashers import make_password

Если это не поможет, пожалуйста, добавьте больше деталей, например, как все хранится в базе данных или какие шаги вы выполняете и получаете ошибку.

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