我正在使用带两个参数的password_verify,即存储在数据库中的哈希值和用户输入的实际密码。 这是代码:
$pass = filter_input(INPUT_GET, 'password', FILTER_DEFAULT);
// connecting to the database and executing query, the password is stored in $dpass
if(password_verify($pass,$dpass))
echo "Hello User " . $dname;
else
echo "Login incomplete";
现在仅作澄清:
Password
列是varchar(256)
password_verify()
,而不使用数据库返回的值(回显哈希,复制和粘贴)BCRYPT
和DEFAULT
,但都没有正确验证可能是什么问题?
答案 0 :(得分:1)
谢谢大家的回答,我在每行中运行echo $ pass之后,我注意到在代码中的某个时候它从原始值更改为另一个值,我再次检查了一下,显然是变量$ pass在dbconnect.php
文件中使用,该文件包含在具有我的数据库配置和设置的代码中,它使用变量$pass
存储数据库密码,这就是更改密码值的原因,我固定了$传递给$ usrPass,一切正常。
因此,对于将来遇到此问题并看到此问题的任何人,以下是导致password_verify()
无法正常工作的最常见错误:
$hash = "$2$ds$fdajja...";
使用双引号使PHP读取$2
$ds
和$fdajja...
作为单个变量,这可能会导致代码中断,请使用单引号代替。password_hash()
期间插入和生成的值匹配varchar(256)
,哈希通常长60个字符,但哈希功能经常得到改进,因此将来长度可能会扩展。user2864740
指出这一点。编辑:伙计们,密码过滤器功能什么也不做,因为无论如何都没有要过滤的东西,对于那些不熟悉该功能的人,该功能基本上可以使用输入参数,它可以同时用于GET和POST输入,因为我仍然在做后端部分,所以我将GET用于测试目的。