【问题标题】:Django 2 model 1 authentication systemDjango 2 模型 1 认证系统
【发布时间】:2016-06-20 15:34:25
【问题描述】:

在我的项目中,我应该创建具有不同属性的个人类型用户和公司类型用户。我可以使用不同的模型创建它们,但我不能同时在身份验证系统中实现它们?不知道有没有可能?

【问题讨论】:

  • 在两个模型中继承AbstractUser 怎么样?
  • @RaviKumar 我可以像你说的那样创建用户,但在 settings.py 中我必须选择我用于身份验证的模型
  • 我希望 link 1link 2 可以帮助您入门。
  • @RaviKumar 谢谢。我希望第二个链接对我来说足够了:))

标签: python django authentication


【解决方案1】:

如 django docs 中所述,您可以编写自己的 AUTHENTICATION_BACKENDS。 例如:

class UserProfileModelBackend(ModelBackend):
    def authenticate(self, username=None, password=None):
        try:
            user = self.user_class.objects.get(username=username)
            if user.check_password(password):
                return user
        except self.user_class.DoesNotExist:
            return None

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

    @property
    def user_class(self):
        if not hasattr(self, '_user_class'):
            self._user_class = apps.get_model(*settings.AUTH_USER_MODEL.split('.', 2))
            if not self._user_class:
                raise ImproperlyConfigured('Could not get custom user model')
        return self._user_class

然后将此 auth-backend 添加到 settings.py 的 AUTHENTICATION_BACKENDS 中。 欲了解更多信息,请参阅Writing an authentication backend

当有人调用 django.contrib.auth.authenticate() 时,Django 尝试在其所有身份验证后端进行身份验证。如果第一个身份验证方法失败,Django 会尝试第二个,依此类推,直到尝试所有后端。

小心:

AUTHENTICATION_BACKENDS 的顺序很重要,所以如果相同的用户名和密码在多个后端有效,Django 将在第一个正匹配时停止处理。

【讨论】:

    猜你喜欢
    • 2011-04-16
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    相关资源
    最近更新 更多