繁体   English   中英

如何使用php的password_hash()方法。

[英]How to use php's password_hash() method..?

登录时我得到的密码不匹配,当用户注册时,我将密码另存为

$password = password_hash($this->input->post('password'), PASSWORD_BCRYPT);

当用户登录时,我正在检查这样的密码,

    $hash = password_hash($password, PASSWORD_BCRYPT);
    $this->db->select('password');
    $this->db->from('usersdetails');
    $this->db->where('email', $email);
    $this->db->limit(1);
    $query = $this->db->get();
    $passwordcheck = $query->row()->password;
    if (password_verify($passwordcheck, $hash)) {
       return true;
    } else {
        return false;
    }

但是它总是返回密码不匹配..为什么????? 任何帮助深表感谢...

您应该检查原始的未哈希密码,因为password_verify()会使用创建哈希密码时使用的哈希例程对原始密码进行重新哈希。

如果您查看password_hash()的结果,则哈希中存储了有关使用哪个哈希例程创建此哈希以及如何生成哈希的信息。

$password = 'FredsTheMan';

$hash = password_hash($password, PASSWORD_BCRYPT);

if (password_verify($password, $hash)) { 
   return true;
} else {
    return false;
}

该区域的另一个常见错误是没有为您在数据库表上使用的列提供足够的字符来容纳哈希的全部结果

使用PASSWORD_BCRYPT生成的哈希值为60个字符

$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K

请注意,如果在分支中提供了其他哈希,它们可能会导致哈希超过60个字符

简而言之,您的代码应该是

$this->db->select('password');
$this->db->from('usersdetails');
$this->db->where('email', $email);
$this->db->limit(1);
$query = $this->db->get();
$pwd_from_db = $query->row()->password;

if (password_verify($this->input->post('password'), $pwd_from_db)) {
   return true;
} else {
    return false;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM