Django 2.1 用户认证系统authenticate()一直返回None

版本CentOS6.8 python3.6 Django2.1

用了Django2.1版本一段时间后,发现真的存在很多问题,心累,话不多说,进入主题!
我用的是Django内部的User认证系统,代码是这样的:
Django 2.1 用户认证系统authenticate()一直返回None_第1张图片
经过反复检验代码,也给别人看过,都没问题,而且别人用其它版本的django实现了我的代码,可以输出user,但是我用的2.1版本,user输出一直为None!我查看了Django2.1的文档,文档里的authenticate()方法格式什么的都跟我的一样,没差!但是就是实现不了,在度娘有资料说创建用户时用 User.objects.create_user(username=name, password=pwd),因为User.objects.create()创建的用户密码是明文的,authenticate()验证不了明文的密码,但我这里两种方法都试了还是没用!这里只能说是Django2.1版本的bug了。

既然用这个authenticate()不能验证用户,那就只能用其它方法实现了。在查看create_user()这个方法时,看到它是用set_password()来加密的。
Django 2.1 用户认证系统authenticate()一直返回None_第2张图片
那知道了加密方法,直接找对应的解密方法就好了,这里有一个方法是check_password(),就是验证明文密码与加密密码是否一致的,一致就返回True,否则返回False。
from django.contrib.auth.hashers import check_password 导入check_password,修改后的完整程如下:
Django 2.1 用户认证系统authenticate()一直返回None_第3张图片

这样也可以做到用户验证的功能,不过这里有一点我也不是很了解,就是用了这个方法实现,只有新建的用户才会有效,之前创建的用户无效!我也搞不明白,可能之前创建的用户因为用过authenticate()这个方法,所以把密码处理过吧!反正Django2.1 问题多多!

你可能感兴趣的:(Django,python,django2.1,CentOS6.8,python)