在没有数据库的Django中进行身份验证

gos*_*ng_ 9 python django django-authentication python-3.x

我有一个Django应用程序,完全从apis获取它的数据.所以我不必使用数据库.会话数据存储在已签名的cookie中.我尝试在文档上编写自定义用户模型和自定义身份验证后端,但是我收到以下错误: django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model 'my_app.MyUser' that has not been installed

我的settings.py:

AUTH_USER_MODEL = 'my_app.MyUser'
AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',
                           'my_app.backends.LoginAuthBackend',)
Run Code Online (Sandbox Code Playgroud)

models.py:

class MyUser(object):
    def save(self):
        pass
    objects = None
    username = ""
Run Code Online (Sandbox Code Playgroud)

在这里,如果尝试使用来自django而不是Object的AbstractUser,我收到以下错误:AttributeError: 'NoneType' object has no attribute '_meta'或者db表没有退出.

backends.py

class LoginAuthBackend(object):
    def authenticate(self, username=None, password=None):
        if username and password:
           try:
               response = my_auth_function(username, password)
               if response.status_code == 200:
                   token = response.get('my_key')
                   user = MyUser()
                   return user
            except MyCustomException:
                  return None
Run Code Online (Sandbox Code Playgroud)

这让我发疯了.看起来Django没有DB就不容易使用.

编辑

经过多次尝试,要解决这个简单的方法是删除 'django.contrib.auth.backends.ModelBackend'AUTHENTICATION_BACKENDSAUTH_USER_MODEL从设置.该模型基本上以相同的方式继续.工作顺利

big*_*ose 4

默认的身份验证后端处理器集在AUTHENTICATION_BACKENDS设置中定义。请参阅 Django 文档以了解自定义身份验证

\n\n
\n

默认情况下,AUTHENTICATION_BACKENDS 设置为:

\n\n
[\'django.contrib.auth.backends.ModelBackend\']\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\x99 是基本身份验证后端,用于检查 Django 用户数据库并查询内置权限。

\n
\n\n

因此,如果您不需要该django.contrib.auth.backends.ModelBackend身份验证方法,请将其从列表中删除。您可能想要找到(或创建)一个不同的并将其添加到列表中。

\n