zoukankan      html  css  js  c++  java
  • Django1.11自带authenticate认证错误问题

    问题描述:

      

     def post(self, request):
            """登陆校验"""
            username = request.POST.get('username')
            password = request.POST.get('pwd')
            if not all([username, password]):
                return render(request, 'login.html', {'errmsg': '数据不完整'})
    
            user = authenticate(username=username, password=password)
            if user is not None:
                if user.is_active:
                    # 用户已激活
                    login(request, user)
                    return redirect(reverse('goods:index'))
                else:
                    # 用户未激活
                    return render(request, 'login.html', {'errmsg': '用户未激活'})
            else:
                return render(request, 'login.html', {'errmsg': '用户名或密码错误'})

    django1.11自带的authenticate模块验证用户,只要用户没激活,输入的用户名密码都是正确的也是返回None值

    问题原因:

      通过查看django.contrib.auth.authenticate 源码

      

       django通过authenticate这个函数返回一个用户对象,这个用户对象是通过_authenticate_with_backend函数产生的

      _authenticate_with_backend的返回值是调用django.contrib.auth.backends.ModelBackend模块的authenticate函数

      

      

     

     从上面两个图可以看出authenticate函数需要同时满足密码正确和is_active=True,才能返回user对象,否则则返回None,所以django1.11自带的authenticate模块验证用户必须要用户名密码正确并且已经激活才能返回user对象,否则为None

    解决方案:

    方案1:去掉系统用户激活判断。

    方案2:升级django版本

  • 相关阅读:
    有种感觉叫失去才知道珍惜
    Alternativa 3D Series – Tutorial 1 – Getting Started
    ruby中使用MiniMagick处理图片
    RMagick动态生成图片
    Rails Model验证之强大
    Rails验证信息的中文化
    Prawn:Ruby生成PDF更简捷的选择
    ruby gem相关命令使用
    Ruby Gems(1)–简要介绍和ruby on rails安装
    Rails安装
  • 原文地址:https://www.cnblogs.com/blogsupermouse/p/12808228.html
Copyright © 2011-2022 走看看