首页 > 解决方案 > AUTH_USER_MODEL 是指尚未为自定义身份验证后端安装的模型“base.User”

问题描述

我正在尝试在自定义身份验证模型时自定义身份验证后端,但由于我正在使用get_user_model()函数而一直面临此错误。

django.core.exceptions.ImproperlyConfigured:AUTH_USER_MODEL 指的是尚未安装的模型'base.User'

INSTALLED_APPS = [
     'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'base.apps.BaseConfig',
     'core.apps.AccountsConfig',
     'system.apps.SystemConfig',
]

自定义后端:

class UserBackend(object):
    def authenticate(self, request, username=None, password=None, **kwargs):
        usermodel = User
        try:
            usr = usermodel.objects.get(username=username)
            password_valid = usr.check_password(password)
            if usr and password_valid:
                return usr
            raise PermissionDenied
        except usermodel.DoesNotExist:
            return PermissionDenied
        return None

    def get_user(self, user_id):
        usermodel = User
        try:
            return usermodel.objects.get(pk=user_id)
        except usermodel.DoesNotExist:
            return None

编辑:

设置:

AUTH_USER_MODEL = 'base.User'
AUTHENTICATION_BACKENDS = (
'base.models.UserBackend',
)

base.User模型:

class User(AbstractUser):
    fullname = models.CharField(max_length=35, null=True, blank=True)
    picture = models.ManyToManyField('ImageFile', verbose_name="ProfilePicture", blank=True)
    bio = models.CharField(max_length=255, null=True, blank=True)
    link = models.URLField(null=True, blank=True, default="")
    is_private = models.BooleanField(default=False)
    is_official = models.BooleanField(default=False)

注意:UserBackend 位于文件末尾且class User(AbstractUser)位于其上方

标签: djangodjango-authentication

解决方案


base.models文件中有一个导入,from django.contrib.auth.backends import ModelBackend即使我删除了自定义,也会导致此错误。AUTHENTICATION_BACKENDS删除此导入后,尽管我将后端类从应用程序中的文件移到了文件中,但一切正常base.modelsbackendbase认为这没有必要,我只是做了更多可读代码)


推荐阅读