登录并注册password_hash PHP

时间:2018-03-25 08:56:58

标签: php codeigniter password-hash

什么?如何从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);
    }

2 个答案:

答案 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:)