如何解决PHP password_hash 不能跨浏览器或机器工作并返回 null
PHP Version: 7.4
我正在使用 password_hash
,但遇到了一个奇怪的问题。我的代码非常适合我,我可以使用 Chrome 登录我的网站而不会出现任何问题。但是,另一个尝试登录的人在使用 Chrome 时不断收到错误的密码错误,因此我尝试在另一个浏览器中登录并开始收到相同的错误。
我已将问题定位为使用 password_hash
和 password_verify
,它们分别返回 null 和 false。 password_verify
返回 false,因为它将空字符串与数据库中的有效密码字符串进行比较。
数据库中的密码类似于:$2y$10$pH87se8G0fP9bE/s6RtPReVDqn2qOqs0CA8BE90DLCD9RLtLdG74e
。
我的代码如下:
$options = [ // pass hash options
'cost' => 14,];
$pass = password_hash(base64_encode(hash("sha512",strval($_POST['password']),true),PASSWORD_DEFAULT,$options));
if(!password_verify(base64_encode(hash("sha512",true)),$fetch['password'])) {
正如我所说,这在 Chrome 中非常适合我,但不适用于任何其他浏览器,而且这不适用于任何浏览器上的任何其他人。
我也在其他网站上使用过这个系统,以前从未出现过问题,所以我不知道为什么会遇到这个问题。
有什么想法吗?
解决方法
我按照@Jeto (Jeto's Comment) 的建议删除了手动编码,从而解决了这个问题。
我的代码现在是这样的:
password_hash($_POST['password'],PASSWORD_DEFAULT)
password_verify($_POST['password'],$fetch['password'])
我遇到的问题仍然很不寻常,因为它有时会正常工作,但回归基础解决了问题(因为它经常这样做)。
谢谢杰托。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。