什么?如何从DB检查密码?我还注意到我使用相同的密码注册了2个帐户,但它们的哈希值不一样。问题是password_verify返回false。密码与散列字符串不匹配
我只是按照PHP手册password_hash和password_verify。我已经搜索过StackOverflow,但我无法得到答案。
LOGIN
public function login_user($username, $password){
$this->db->where(['username' => $username]);
$result = $this->db->get('user');
//if($result->num_rows() >= 1){
if($result->num_rows() >= 1)
{
// $user = $result->result_array();same
$user = $result->row_array(0);
$pw = $user['password'];
// $pass = password_hash($password, PASSWORD_DEFAULT);
// var_dump(password_verify($pass, $pw));
// var_dump($pass);
// var_dump($pw);
// die();
if(password_verify($password, $pw)){
return $user;
}
}
else{
return FALSE;
}
}
REGISTER
public function add_user($username, $password, $type){
$data = [
'username' => $username,
'password' => password_hash($password, PASSWORD_DEFAULT),
'type' => $type
];
$this->db->insert('user', $data);
}
答案 0 :(得分:0)
尝试此操作以验证用户。
您$this->db->where(['username' => $username]);
不需要[]
要获得单个项目,我会像$query->row('password');
一样使用。
这里举例说明我将如何验证验证密码。
public function validate_password($username, $password){
$this->db->where('username', $username);
$query = $this->db->get('user');
if($query->num_rows() == 1){
$input_password = $password;
$stored_password = $query->row('password');
if (password_verify($input_password, $stored_password)) {
return true;
} else {
return false;
}
}
return false;
}
在您的控制器上成功部分表单或您可以用作回调函数
if ($this->some_model->validate_password($this->input->post('username'), $this->input->post('password')) {
// Once is success full have another function that can get user information via username.
return true;
} else {
return false;
}
答案 1 :(得分:0)
password_verify($ password,$ pw)返回false,因为哈希密码不是至少60个字符。我之前的数据库中的列密码只有50个字符,现在我将其更改为255个字符。然后问题解决了!感谢Magnus Eriksson:)