【发布时间】:2019-12-28 16:07:06
【问题描述】:
我有一个 CustomUser 扩展 AbstractUser 如下
class CustomUser(AbstractUser):
USERTYPE_CHOICES = [(1,"A"),(2,"B"),(3,"C")]
usertype = models.IntegerField(choices = USERTYPE_CHOICES, default = 1)
我的settings.py 中有以下几行
INSTALLED_APPS = [
...
'login_register_service_hub.apps.LoginRegisterServiceHubConfig',
...
AUTH_USER_MODEL = 'login_register_service_hub.CustomUser'
一切都按预期进行:
我正在尝试实现自定义身份验证后端,我通过包含以下内容来做到这一点
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth import get_user_model
#Check for the is_active property
class EmailBackend(ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs):
UserModel = get_user_model()
try:
user = UserModel.objects.get(email=username)
except UserModel.DoesNotExist:
return None
else:
if user.check_password(password):
return user
return None
def get_user(self, user_id):
UserModel = get_user_model()
try:
return UserModel.objects.get(pk=user_id)
except UserModel.DoesNotExist:
return None
我用以下内容更新了我的settings.py:
AUTHENTICATION_BACKENDS = {'login_register_service_hub.EmailBackend',}
但是一旦我跑了
python3 manage.py runserver
我收到以下错误
"AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL
django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model 'login_register_service_hub.CustomUser' that has not been installed
有趣的是,只有在我导入 ModelBackend 时命令才会失败(即使我注释掉了 EmailBackend 定义)
【问题讨论】:
-
您可以尝试删除您的数据库,创建一个新数据库,删除所有迁移,最后进行迁移并再次迁移吗?
-
login_register_service_hub中有什么内容?我注意到后端是直接从应用程序导入的,模型在models.py文件中吗? -
@engin_ipek 我删除了数据库,迁移但运行 makemigrations 失败并出现同样的错误
-
@IainShelvington 以上定义在
models.py的login_register_service_hub中 -
将您的
AUTHENTICATION_BACKENDS设置更改为导入'login_register_service_hub.backend.EmailBackend'