I have been trying to get my Django custom backend to work and it refuses to accept my credentials, which are correct in the database (I have verified this). It just keeps saying email and password are incorrect.
I am lost and don't know where to go from here with this. I really need help at this point.
VIEWS.PY
    class MyLogin(LoginView):
        template_name = 'employees/login.html'
        success_url = 'employees:emp-home'
        authentication_form = LoginForm
        def get_success_url(self):
            return super().get_success_url()
        def form_valid(self, form):
            user = self.request.POST['username']
            password = self.request.POST['password']
            authenticate(EmpBackend, self.request, user, password)
            return HttpResponseRedirect(self.get_success_url())
MODELS.PY
    class EmpUserManager(BaseUserManager):
        def create_user(self, email, password=None):
            if not email:
                raise ValueError("Users must have an email address")
            user = self.model(email=self.normalize_email(email))
            user.set_password(password)
            user.save()
            return user
        def create_staffuser(self, email, password):
            """
            Creates and saves a staff user with the given email and password.
            """
            user = self.create_user(
                email,
                password=password,
            )
            user.staff = True
            user.save(using=self._db)
            return user
        def create_superuser(self, email, password):
            user = self.create_user(email, password=password)
            user.staff = True
            user.save()
            return user
    class Emp(AbstractBaseUser):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        email = models.CharField(max_length=100, default=None, unique=True)
        first_name = models.CharField(max_length=100, default=None, null=True)
        last_name = models.CharField(max_length=100, default=None, null=True)
        username = models.CharField(max_length=100, default=None, null=True)
        password = models.CharField(max_length=100, default=None)
        phone = models.CharField(max_length=20, default=None, null=True, blank=True)
        address1 = models.CharField(max_length=100, default=None, null=True, blank=True)
        address2 = models.CharField(max_length=100, default=None, null=True, blank=True)
        city = models.CharField(max_length=100, default=None, null=True, blank=True)
        state = models.CharField(max_length=100, default=None, null=True, blank=True)
        zip = models.CharField(max_length=10, default=None, null=True, blank=True)
        position = models.CharField(max_length=50, default=None)
        date_hired = models.DateTimeField(auto_now_add=True)
        date_updated = models.DateTimeField(auto_now_add=True)
        date_terminated = models.DateTimeField(default=None, null=True, blank=True)
        status = models.SmallIntegerField(default=0)
        emp_is_salary = models.BooleanField(default=False)
        emp_pto_rate = models.DecimalField(max_digits=8, decimal_places=4, default=0.0)
        emp_user_level = models.SmallIntegerField(default=1)
        emerg_contact1 = models.CharField(max_length=100, default=None, null=True, blank=True)
        emerg_contact1_phone = models.CharField(max_length=20, default=None, null=True, blank=True)
        emerg_contact1_address = models.CharField(max_length=200, default=None, null=True, blank=True)
        emerg_contact1_city_st = models.CharField(max_length=200, default=None, null=True, blank=True)
        emerg_contact2 = models.CharField(max_length=100, default=None, null=True, blank=True)
        emerg_contact2_phone = models.CharField(max_length=20, default=None, null=True, blank=True)
        emerg_contact2_address = models.CharField(max_length=200, default=None, null=True, blank=True)
        emerg_contact2_city_st = models.CharField(max_length=200, default=None, null=True, blank=True)
        emp_note = models.TextField(default=None, null=True, blank=True)
        emp_hourly_rate = models.DecimalField(max_digits=8, decimal_places=4, default=0.0)
        emp_net_pto = models.DecimalField(max_digits=8, decimal_places=4, default=0.0)
        emp_pto_prev = models.DecimalField(max_digits=8, decimal_places=4, default=0.0)
        emp_image = models.ImageField(upload_to='media/employees/profile-pics/',
                                      default='media/employees/profile-pics/default.png', null=True, blank=True)
        USERNAME_FIELD = 'email'
        REQUIRED_FIELDS = []
        def get_full_name(self):
            return f'{self.first_name} {self.last_name}'
        def get_email(self):
            return self.email
        def __str__(self):
            return self.email
        def save(self, *args, **kwargs):
            super(Emp, self).save(*args, **kwargs)
            self.username = self.email
            img = Image.open(self.emp_image.path)
            if img.height > 300 or img.width > 300:
                output_size = (300, 300)
                img.thumbnail(output_size)
                img.save(self.emp_image.path)
        def get_user_permissions(self, obj=None):
            return True
        def get_absolute_url(self):
            return reverse('employees:emp-detail', args=[self.id])
        objects = UserManager()
BACKENDS.PY
from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
from .models import Emp
from .views import *
User = get_user_model()
class EmpBackend(ModelBackend):
    supports_object_permissions = True
    supports_anonymous_user = False
    supports_inactive_user = False
    def authenticate(self, email=None, password=None, **kwargs):
        username = kwargs.get('username')
        password = kwargs.get('password')
        if username is None or password is None:
            return
        try:
            user = User.objects.get(email=username)
            if user.check_password(password) and self.user_can_authenticate(user):
                return user
        except User.DoesNotExist:
            return None
        return None
    def user_can_authenticate(self, user):
        is_active = getattr(user, 'is_active', None)
        return is_active or is_active is None
    def get_user(self, user_id):
        try:
            return Emp.objects.get(pk=user_id)
        except Emp.DoesNotExist:
            return None
    def has_perm(self, perm, obj=None):
        return True
    def has_module_perms(self, app_label):
        return True
SETTINGS.PY
# Login model override
AUTH_USER_MODEL = 'auth.User'
# AUTH_PROFILE_MODEL = 'employess.Emp'
LOGIN_URL = 'employees:login'
LOGIN_REDIRECT_URL = 'employees:emp-home'
AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'employees.backends.EmpBackend',
]
