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值,然后用于加密用户输入的值,再比较两者是否相同,因此三点都不成立

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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值