【python开发bug记录】django2.0: auth模块的authenticate对is_active为0时,一直返回None解决办法

这个问题绕了我好久,不停的和老师的代码对照,一模一样,又看了看django2.0的官方认证文档,无解纳闷了~~~
后来网上搜索找到办法

0x00问题

相关bug代码
在确认数据库中存在该用户数据,并且我用户名和密码都是对的情况下,使用auth模块的authenticate认证,is_active=0时一直返回None,通过学习过程中了解到了一些解决办法。

0x01办法

法一:

使用django自带的auth.user类,在modles下自建的user下的账号,有时候authenticate() 会读取不到信息

  • 这个还没用到过,也不会用,放这以后可能用的着

法二:

在账号注册的时候,插入函数要用对,要用objects.create_user()函数,如果用objects.create插入时以明文保存的,authenticate()函数通过加密后再进行对比,所以读不到。

  • create_user() 这个函数会将密码自动加密,而不是明文保存
  • authencate() 会将输入的明文密码,自动加密,然后去数据库匹配,如果匹配成功返回一个user对象,如果不成功,返回None
user = authenticate(request, username=username, password=password)

user = User.objects.create_user(username, email, password)
  • 这个问题我稍微可以理解,主要是在开发中学了这几个函数

法三:

我在开发过程中就是这个问题,我太难了····
在我的版本django2.0下使用authenticate()验证会关联is_active字段。
当is_active=0时,默认不能通过我的第一个if判断(一图有标注),一直返回None。

  • 在settings.py文件中加入一段配置
# 让authenticate不关联is_active
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.AllowAllUsersModelBackend']

注:设置完这个后,重新运行程序没有用,得把pycharm关掉重新打开项目运行,并且之前通过注册写入数据库的数据不起作用,删了重新写入就好了,

  • 删除数据库的数据命令
python manage.py flush

法四:

假若以上三种方法都没能解决问题,还有可以通过check_password来帮助解决问题

第四种解决办法

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值