django中使用auth.authenticate在用户名和密码都正确的情况下返回值依然为None的可能原因

毕业设计做了一个系统,其中涉及到用户修改密码,然后发现密码改完之后即使输入了也登不上去,最终定位到问题出在auth.authenticate上,它返回的是None,在csdn上找了好久,全都是说在创建的时候使用django自带的user数据库使用create_user创建,在修改密码的时候用django自带的数据库使用set_password修改密码,或者是说用户没激活,可是我原来就是这么做的而且也激活了...

经过一番观察和思考,发现数据库中django自带的user表里的密码都是sha256加密,猜测是否为sha256对相同内容可能产生不同的结果,于是我决定尝试一下。

实验如下,原密码为123,将其改为1,然后再次改为123,

数据库中该字段最初的值如下

将密码改为1之后的值如下

 

 此时如果在登录中输入账号和密码(也就是1),比对结果会错误,如下图

 现在我们再把它改回来,也就是把密码改回123,数据库中结果如下

 

显然,我的猜测是对的

进一步分析,为什么sha256对相同的内容加密会有不同的结果呢?

我决定去问问万能的ChatGPT(笑)

 

首先我的程序是能够正常运行的,且salt我也从来没有动过,因此排除的代码的问题,其次,我的django版本没有换过,数据库中的密码时django在加密之后才存进去,而django的auth在验证的时候回自动从加密过的信息中提取salt值,然后用于加密用户输入的值,再比较两者是否相同,因此三点都不成立

至此没有发现有效的解决办法,有懂的大佬欢迎在评论区留言哦

 

本文链接:https://my.lmcjl.com/post/10063.html

展开阅读全文

4 评论

留下您的评论.