Django - 使用多个模型进行身份验证

时间:2016-09-30 13:34:40

标签: python django authentication django-registration custom-authentication

我是django的新手,我担心我们是否可以为我们的应用程序使用多个模型对不同类型的用户进行身份验证,例如,客户使用客户模型,供应商使用供应商模型,并保留默认的用户注册模型管理只使用?如果是这样,你能指出我正确的方向,它是如何做到的?应该使用哪个包? 我遇到的一种方法是向每个模型添加一个外键,用于身份验证,但这将涉及每个查询中的连接,这可能会导致性能问题。我需要知道是否有更好的方法。这些自定义模型也可以受益于管理面板中可用的所有权限。 专家意见将非常感谢。

1 个答案:

答案 0 :(得分:0)

有几种不同的方法可以解决这个问题。 也许先检查the Django-docu。 我想自定义它以使用邮件地址验证您的用户,这是knbkrahul-gupta在前文档上编写的示例:

  

Django的默认身份验证适用于用户名和密码字段。电子邮件身份验证后端将根据电子邮件和密码对用户进行身份验证。

from django.contrib.auth import get_user_model

class EmailBackend(object):
    """
    Custom Email Backend to perform authentication via email
    """
    def authenticate(self, username=None, password=None):
        user_model = get_user_model() 
        try:
            user = user_model.objects.get(email=username)
            if user.check_password(password): # check valid password
                return user # return user to be authenticated
        except user_model.DoesNotExist: # no matching user exists 
            return None 

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

将此身份验证后端添加到AUTHENTICATION_BACKENDS设置。

# settings.py
AUTHENTICATION_BACKENDS = (
    'my_app.backends.EmailBackend', 
    ... 
)