码迷,mamicode.com
首页 > 其他好文 > 详细

Django1.11自带authenticate认证错误问题

时间:2020-04-30 13:17:31      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:函数   描述   激活   ima   mod   index   bsp   方案   dex   

问题描述:

  

 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版本

 

Django1.11自带authenticate认证错误问题

标签:函数   描述   激活   ima   mod   index   bsp   方案   dex   

原文地址:https://www.cnblogs.com/blogsupermouse/p/12808228.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!