我在最后一小时一直在玩这个,但找不到解决办法。我搜索过类似的问题,但没有一个能够给我一个解决方案。当放入数据库并从数据库调用时,我确保散列的长度为60。我省略了很多代码以减少占用的空间。假设一切正常,除了password_verify。
当用户注册时,这是我的代码。
$hash = password_hash($password, PASSWORD_BCRYPT);
// echo strlen($hash); output is 60
$handler = new PDO('mysql:host=127.0.0.1;dbname=ps', 'ah','je');
$sql = "INSERT INTO users (username, first_name, last_name, email, phone_number, location, activation_code, hash)"
. "VALUES(?,?,?,?,?,?,?,?)";
$query = $handler->prepare($sql);
$n = $query->execute(array($username, $first_name,
$last_name, $email, $phone_number, $location, $activate_code, $hash));
包括散列在内的所有值都存储在数据库中。哈希的设置为varchar(100)。这是用户尝试登录时运行的代码。
$username = $_POST['username'];
$password = $_POST['password'];
$handler = new PDO('mysql:host=127.0.0.1;dbname=ps', 'ah','je');
$sql = "SELECT id, hash FROM users WHERE username = ?";
$query = $handler->prepare($sql);
$brigga = $query->execute(array($username));
$row = $query->fetch(PDO::FETCH_ASSOC);
$hash = $row['hash']; //strlen($hash); output is 60
$user_id = $row['id'];
if (password_verify($password, $hash))
{
return $user_id;
}
else
{
return FALSE;
}
代码不断返回false并且让我疯狂。有什么建议吗?