天天看点

django——在使用django内置的check_password()方法时遇到的坑

最近新写了一个项目,写道个人信息界面的时候有一个修改密码的接口,需要先填写用户的原密码,原密码填写正确才可以填写新密码进行修改,那么我就需要对原密码进行校验了。首先说明,数据库里面的密码是利用make_password()方法加密后的密文,也就是说我要在前端写明文去匹配数据库里的密文时,需要通过check_password()来验证,然后我就感觉这很so easy嘛(之前做过修改密码的),然后就很快速的把代码敲好了,然后我就去测试,but,给了我一个原密码错误。然后我的第一反应就是不可能,是不是方法出bug了,然后立马又否定了自己的想法,还是好好看看代码吧,看了好长时间也没看出个所以然来(想偷个懒也不行,还是老老实实的debug吧),把自己输入的明文通过make_password()加密,来和数据库的密文就行对比,这样就能很直观的看出来是否一样了吧,结果就是不一致。WHY?之后查了一下资料说的是django内置的make_password()对同一个字符串加密结果不同(当然也可以一些修改,让加密结果相同,这里不多说,可以看这篇文章https://www.cnblogs.com/yangxiaolan/p/5988132.html),所以这种方法也不行了,好吧,又没招了。看来只能用最后一招了,看源码,看了之后才发现,check_password()这个方法接受的第一个参数是明文,第二个是密文,只有这样才能准确的校验密码是否一致,而我之前确实没注意参数的位置,以致于一致无法准确的校验出密码是否正确,找到问题之后顿视觉的自己还是太盲目了,越是简单的东西越是容易出错啊。

贴一下我的代码记录一下:

django——在使用django内置的check_password()方法时遇到的坑