django2.x -- auth模块的authenticate方法一直返回None,认证不成功
问题1:创建用户时是否使用的是create_user
在账号注册的时候,要用objects.create_user()函数,create()是明文存储
- create_user()这个函数会将密码自动加密,密文存储,加密规则“pbkdf2_sha256”
- authenticate()会将输入的明文密码,自动加密,然后去数据库匹配,如果匹配成功返回一个user对象,如果不成功,返回None。
User.objects.create_user(username, email, password)
authenticate(username=username, password=password)
问题2:django2.x版本问题
Django2.X中,authenticate将is_active关联了,当is_active=0时,默认验证不通过,所以返回None。
- 解决办法:在项目的settings.py中申明,不关联is_active这个值。
settings.py
# 让authenticate不关联is_active
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.AllowAllUsersModelBackend']
- 用check_password来解决
auth内置check_password()函数, 也可以用于测试密码是否正确。
该方法仅在以上authenticate函数无效情况下使用
from django.contrib.auth.hashers import check_password
# 第一个参数为明文密码,第二个参数为加密后的密码
if check_password(password, pwd):
# 用户名密码正确
pass