我正在使用password_verify来匹配用户输入的密码和数据库中的哈希密码。
这是我用来获取用户输入的变量。
$current_password = $this->input->post('current_password');
我使用row_array()
从用户表中获取一行。字段密码为varchar(256)。
$data['user'] = $this->db->get_where('user', ['email' => $this->session->userdata('email')])->row_array();
然后我使用var_dump
,但它总是返回false
var_dump(password_verify($current_password, $data['user']['password']));
我不知道我的代码有什么问题。我尝试var_dump()
来自dtb的哈希密码及其完全相同。
var_dump($data['user']['password']);
// Output
string(60) "$2y$10$w4wKGfA/z76.mNkfgD5gfOcnNSzWGL06CxQuw/fhukIGdZtb1HXFm"
// Vardump user input
var_dump($current_password);
// Output
string(4) '1234'
最奇怪的是,我尝试对输入进行哈希处理。
$current_password = 1234;
$hash = password_hash($current_password, PASSWORD_DEFAULT);
var_dump($hash);
// Output
string(60) "$2y$10$jRhdd.8Wse/fQ5A0mXtZfe9.n6JPeEpsLd8r06/bvL6MwVLVLbSZC"
它与数据库中的哈希密码完全不同,但是怎么可能呢?我使用此密码(1234)登录,并且可以正常使用,登录名也使用password_verify。
注意:我在trim
中使用form_validation
进行所有密码输入,因此用户输入的开头和结尾都没有空格。对不起,我的英语不好。