password_verify始终返回false

时间:2014-12-25 21:08:48

标签: php passwords

我在最后一小时一直在玩这个,但找不到解决办法。我搜索过类似的问题,但没有一个能够给我一个解决方案。当放入数据库并从数据库调用时,我确保散列的长度为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并且让我疯狂。有什么建议吗?

0 个答案:

没有答案