无法使用password_verify验证密码

时间:2019-01-10 21:17:43

标签: php codeigniter login passwords

我正在尝试重定向到在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,任何人都可以指出我错过的地方逻辑?

2 个答案:

答案 0 :(得分:3)

  

@YashKaranke密码列的长度是多少? – Funk Forty Niner
  @FunkFortyNiner数据类型为varchar的值为50 – Yash Karanke

“密码”列的长度太短,应按照the manual on PHP.net for password_hash()的建议为60或255。

您现在必须从新哈希开始。

验证失败

答案 1 :(得分:1)

如果您使用的是:

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

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

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