使用密码登录并注册\u hash PHP
什么?如何从DB检查密码?我还注意到我用相同的密码注册了两个帐户,但它们的哈希值不一样。问题是密码\u verify返回false。密码与哈希字符串不匹配 我只是按照PHP手册中的密码散列和密码验证。我已经不仅仅在StackOverflow搜索过了,我就是找不到答案 登录 登记册使用密码登录并注册\u hash PHP,php,codeigniter,password-hash,Php,Codeigniter,Password Hash,什么?如何从DB检查密码?我还注意到我用相同的密码注册了两个帐户,但它们的哈希值不一样。问题是密码\u verify返回false。密码与哈希字符串不匹配 我只是按照PHP手册中的密码散列和密码验证。我已经不仅仅在StackOverflow搜索过了,我就是找不到答案 登录 登记册 public function add_user($username, $password, $type){ $data = [ 'username' => $us
public function add_user($username, $password, $type){
$data = [
'username' => $username,
'password' => password_hash($password, PASSWORD_DEFAULT),
'type' => $type
];
$this->db->insert('user', $data);
}
尝试此操作以验证用户身份 您的
$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;
}
密码验证($password,$pw)返回false,因为哈希密码至少不是60个字符。以前数据库中的列密码只有50个字符,现在我将其更改为255个字符。然后问题就解决了!。感谢Magnus Eriksson:)“相同的密码,但它们的哈希值不相同”是的,这是正确的行为。您的问题不清楚,请向我们提供您的问题。如果您的函数返回false
,则是您的DB查询没有返回行(或者如果以某种方式出错)。如果密码未正确验证,则您将获得null
。在数据库中,password
列的长度是多少?它至少需要60个字符(最好更长,以备将来使用)。您确定每次都以相同的方式从前端传递密码字符串(例如,没有像strtollower
这样的特殊功能或添加额外字符)?您是否介意分享您所更改的内容,以及为什么它的工作方式与原始代码不同?OP在评论中说他们确实从DB那里得到了一个结果。@MagnusEriksson我已经尽力解释了,如果你不想,你可以改进它。我不擅长解释。没关系。只是,只有“试试这个”并不是很有建设性:-)我已经做了条件,我只是删除了它来检查密码验证返回的内容。如果(password\u verify($password,$user['password']){return$user;}否则{return false;}请确保您获得了正确的postvar\u dump($this->input->post())
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;
}