无法使用 password_verify 验证密码

Cannot verify password with password_verify

我正在尝试实现重定向到在 Codeigniter 会话中存储电子邮件的用户的主页。我已经使用 password_hash($this->input->post('password'), PASSWORD_DEFAULT)) 来散列密码并且它工作正常,但是当我尝试 password_verify() 它时,它失败了。

这是我的模型

public function canLogin($email, $password) {
    $this->db->where('email',$email);
    $query  =   $this->db->get($this->tableName);
    $row    =   $query->row();
    if ($row) {
        return password_verify($password, $row->password);
    }
    else {
        return false;
    }
}

这是我的控制器

public function loginValidation() {
    // User Model Loaded in constructor
    if ($this->user->canLogin($_POST['email'], $_POST['password'])) {
        $session_data   =   array('email' => $_POST['email'] );
        $this->session->set_userdata($session_data);
        redirect('profile/personal','Refresh');

    } else {
        echo 'fail';
        $this->session->set_flashdata('error', 'Invalid Username or Password');
        // redirect('login','Refresh');
    }
}

我不知道逻辑哪里出错了,它每次都重定向到同一个登录页面,我正在尝试对其进行身份验证,将电子邮件存储在会话中并将其重定向到 profile/personal,任何人都可以指出哪里我错过了逻辑?

如果您正在使用:

password_hash($this->input->post('password', PASSWORD_DEFAULT));

您确定哈希处理正确吗?不应该是:

password_hash($this->input->post('password'), PASSWORD_DEFAULT);

@YashKaranke what is the password column's length? – Funk Forty Niner
@FunkFortyNiner It is 50 with datatype varchar – Yash Karanke

密码栏的长度太短,应该是 the manual on PHP.net for password_hash() 建议的 60 或 255。

您现在必须使用新的哈希值重新开始。

验证失败默默.