Django 多种身份验证模型

Moh*_*han 5 python django django-models django-authentication

我正在开发一个项目,需要 3 种类型的用户。

  • 行政
  • 小贩
  • 顾客

我希望为所有三个供应商和客户拥有单独的模型,而不是在公共用户模型中拥有类型字段。

我解决这个问题的第一个方法是通过子类AbstractUser模型来定义所有模型

# models.py
from django.contrib.auth.models import AbstractUser

class Customer(AbstractUser):
    pass


class Vendor(AbstractUser):
    pass
Run Code Online (Sandbox Code Playgroud)

并添加自定义的身份验证后端来处理基于请求对象的用户身份验证。

# settings.py

AUTHENTICATION_BACKENDS = ['backends.CustomAuthBackend']
Run Code Online (Sandbox Code Playgroud)

我的 backends.py 文件将包含对用户进行身份验证的逻辑,并根据请求对象为每个用户使用不同的模型。

# backends.py
from __future__ import print_function


class CustomAuthBackend(object):

    def authenticate(self, request, username=None, password=None):
       # authenticate user based on request object

    def get_user(self, user_id):
        # logic to get user
Run Code Online (Sandbox Code Playgroud)

然而,这不起作用,看起来我还需要在 settings.py 中指定用于身份验证的AUTH_USER_MODEL 。

Django 是否允许从 3 个不同的表进行身份验证?我怎样才能继续这个?还有其他方法吗?我应该改变什么?

dah*_*ens 1

django.contrib.auth被设计为与一个 UserModel 一起使用。根据您想要实现的目标,有不同的方法。

如果您只想为不同类型的用户存储不同类型的配置文件/元数据,您可以使用多表继承- 在这种情况下,您可能会坚持使用默认用户模型。

当涉及到基于用户类型的不同权限时,您不应该使用单独的类来解决这个问题。而是使用。这种方法更加灵活。一个人属于多个用户组的情况几乎总是可能发生。当您根据用户类别对此进行建模时,您就会遇到麻烦。