【问题标题】:Problem with custom authentication backend自定义身份验证后端的问题
【发布时间】:2019-05-08 08:57:56
【问题描述】:

我正在尝试为我的 django 项目进行自定义身份验证。我通过继承 AbstractUser 来使用自定义用户模型。现在,在创建超级用户帐户并尝试从管理页面登录后,我收到错误 请输入员工帐户的正确用户名和密码。请注意,这两个字段都可能区分大小写。。我已经仔细检查了我的用户名和密码是否正确。

经过一番研究,发现我正在制作的自定义身份验证后端有问题。

from support.models import CustomUser

class UsernameIdModelBackend(object):
    def authenticate(self,username,password,uid):

        if username:
            try:
                user = CustomUser.objects.get(username=username)

                if user.check_password(password):
                    return user
            except CustomUser.DoesNotExist:
                    return None
        else:
            try:
                user= CustomUser.objects.get(uid=uid)
                return user
            except CustomUser.DoesNotExist:
                return None

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

我还在 settings.py 中设置了 AUTHENTICATION_BACKENDS。应该改变什么来纠正这个问题。有人可以指点我正确的方法吗。

PS。我是自定义身份验证的新手,期待创建具有 2 种登录类型的身份验证。

【问题讨论】:

    标签: python django


    【解决方案1】:

    您可以添加身份验证后端以使用 uid 登录,而不是这样做,就像这样(根据 documentation):

    class UsernameIdModelBackend(object):
        def authenticate(self, request, uid=None):
           try:
               user= CustomUser.objects.get(uid=uid)
               return user
            except CustomUser.DoesNotExist:
              return None
    
        def get_user(self, user_id):
            try:
                return User.objects.get(pk=user_id)
            except User.DoesNotExist:
                return None
    

    并将其添加到AUTHENTICATION_BACKENDS,如下所示:

    AUTHENTICATION_BACKENDS = (
        'django.contrib.auth.backends.ModelBackend',
        'your_path_to.backend.UsernameIdModelBackend',
    )
    

    【讨论】:

    • 好的,我在 AUTHENTICATION_BACKENDS 中没有 'django.contrib.auth.backends.ModelBackend'。我只用了一个。谢谢。所以我必须为使用 uid 的登录做第二个?
    • 您可以使用多个后端(您可以使用只有用户名和密码的旧自定义后端)。所以用户可以通过任一后端登录,它将由 django 处理
    猜你喜欢
    • 1970-01-01
    • 2016-02-03
    • 2012-12-06
    • 2021-02-06
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 2019-05-17
    相关资源
    最近更新 更多