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。

  1. 解决办法:在项目的settings.py中申明,不关联is_active这个值。
    settings.py
    # 让authenticate不关联is_active
    AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.AllowAllUsersModelBackend']
  1. 用check_password来解决
    auth内置check_password()函数, 也可以用于测试密码是否正确。
    该方法仅在以上authenticate函数无效情况下使用
from django.contrib.auth.hashers import check_password

# 第一个参数为明文密码,第二个参数为加密后的密码
if check_password(password, pwd):
    # 用户名密码正确
    pass
posted @ 2022-08-26 09:53  我叫好名字  阅读(331)  评论(0编辑  收藏  举报