使用密码登录并注册\u hash PHP

使用密码登录并注册\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

什么?如何从DB检查密码?我还注意到我用相同的密码注册了两个帐户,但它们的哈希值不一样。问题是密码\u verify返回false。密码与哈希字符串不匹配

我只是按照PHP手册中的密码散列和密码验证。我已经不仅仅在StackOverflow搜索过了,我就是找不到答案

登录

登记册

    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;}请确保您获得了正确的post
var\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;
}