DRF auth_token non_field_errors: [Невозможно войти в систему с предоставленными учетными данными. ] с использованием пользовательской модели пользователя

Я пытаюсь создать API для отдыха, используя существующую базу данных. Я также использую аутентификацию токена drf и создал токены для всех существующих пользователей. Когда я пытаюсь ввести свое имя пользователя и пароль, чтобы получить свой токен из моего представления ObtainAuthToken, я получаю следующую ошибку:

 "non_field_errors": [
        "Unable to log in with provided credentials."
    ]

Мой код выглядит следующим образом:

Views.py

from django.shortcuts import render
from django.db import connection
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from rest_framework import viewsets
from rest_framework.authentication import TokenAuthentication
from rest_framework import filters
from rest_framework import generics
from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.settings import api_settings
from rest_framework.permissions import IsAuthenticatedOrReadOnly
from rest_framework.permissions import IsAuthenticated
from rest_framework.renderers import JSONRenderer

from api import serializers
from api import  models

from itertools import chain
# Create your views here.

class UserLoginApiView(ObtainAuthToken):
   """Handle creating user authentication tokens"""
   renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES

urls.py

from django.urls import path, include
from rest_framework.routers import DefaultRouter, SimpleRouter
from api import views

urlpatterns = [

    path('login', views.UserLoginApiView.as_view()),
    
]

модели.py

from django.db import models
from django.contrib.auth.models import AbstractBaseUser
from django.contrib.auth.models import PermissionsMixin
from django.contrib.auth.models import BaseUserManager, UserManager
from django.conf import settings
from django.dispatch import receiver
from django.urls import reverse

class UserProfileManager(BaseUserManager):
 

    def create_user(self, email, username, password=None):
        
        if not email:
            raise ValueError('User must have an email address')

        email = self.normalize_email(email)
        user = self.model(email=email, username=username)

        user.set_password(password)
        user.save(using=self._db)

        return user


    def create_superuser(self, email, username, password):
       
        user = self.create_user(email, username, password)

        user.is_superuser = True
        user.is_staff = True
        user.save(using=self._db)

        return user


def myoverridenmeta(name, bases, adict):
    newClass = type(name, bases, adict)
    for field in newClass._meta.fields:
        if field.attname == 'last_login':
            field.column = 'lastLogin'
            field.db_column = 'lastLogin'
    return newClass


class InvshellUsers(AbstractBaseUser, PermissionsMixin):
    id = models.AutoField(db_column='userID', primary_key=True)  # Field name made lowercase.
    username = models.CharField(max_length=20,unique=True)
    password = models.CharField(max_length=50)
    first_name = models.CharField(db_column='firstName', max_length=50, blank=True, null=True)  # Field name made lowercase.
    lastname = models.CharField(db_column='lastName', max_length=50, blank=True, null=True)  # Field name made lowercase.
    email = models.CharField(max_length=50, blank=True, unique = True, null=True)
    orgid = models.IntegerField(db_column='orgID', blank=True, null=True)  # Field name made lowercase.
    territoryid = models.IntegerField(db_column='territoryID', blank=True, null=True)  # Field name made lowercase.
    locationid = models.IntegerField(db_column='locationID', blank=True, null=True)  # Field name made lowercase.
    role = models.CharField(max_length=15, blank=True, null=True)
    status = models.CharField(max_length=15, blank=True, null=True)
    timezone = models.CharField(max_length=50, blank=True, null=True)
    last_login = models.DateTimeField(db_column='lastLogin', blank=True, null=True)  # Field name made lowercase.
    loginattempts = models.IntegerField(db_column='loginAttempts', blank=True, null=True)  # Field name made lowercase.
    passchangedate = models.DateTimeField(db_column='passChangeDate', blank=True, null=True)  # Field name made lowercase.
    activatedate = models.DateTimeField(db_column='activateDate', blank=True, null=True)  # Field name made lowercase.
    addedby = models.CharField(db_column='addedBy', max_length=50, blank=True, null=True)  # Field name made lowercase.
    uom = models.IntegerField(blank=True, null=True)
    uomtemp = models.IntegerField(db_column='uomTemp', blank=True, null=True)  # Field name made lowercase.

    objects = UserProfileManager()
    
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    def get_short_name(self):
        return self.username

    def __str__(self):
        
        return self.email
    
    __metaclass__ = myoverridenmeta
    class Meta:
        managed = True
        db_table = 'invShell_users'

Соответствующая информация из settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'rest_framework.authtoken',
    'push_notifications',
    #'django_celery_beat',
    'api',
]

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ],
}

AUTH_USER_MODEL='api.InvshellUsers'

Любая помощь в выяснении этой ошибки очень ценится


person TJ D'Alessandro    schedule 13.01.2021    source источник
comment
Помогает ли какой-либо из этих ответов? stackoverflow.com/questions/40076254/   -  person Shradha    schedule 15.01.2021
comment
Сообщение предполагает, что либо имя пользователя, либо пароль неверны. Или, возможно, пользователь не активен. Вы проверили их is_active True?   -  person tim-mccurrach    schedule 18.01.2021
comment
@ tim-mccurrach Однажды у меня была такая проблема, и это было так - пароль был установлен неправильно. возможно посмотрите на это   -  person twrought    schedule 22.01.2021