标签:函数 描述 激活 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