我有简单的登录系统我正在使用bycrypt安全性现在逻辑很简单我已经回应了每个变量一切看起来都很好我的列db也是varchar(255)
所以我没有任何限制问题,而且我试过许多其他解决方案,但徒劳无功,这里是我的代码
存储在db中的原始用户名是admin,密码是admin123我运行password_hash('admin123', PASSWORD_BCRYPT)
函数生成密码我将其复制并粘贴到数据库中!
function validate($data){
$this->db->select("username,password");
$this->db->from('admin');
$query = $this->db->get();
$res= $query->result();
$db_username= $res[0]->username;
$db_password= $res[0]->password;
$user_username= $data['login_username'];
$user_password= $data['login_password'];
$user_password=password_hash($user_password, PASSWORD_BCRYPT);
if($db_username==$user_username){
//returns true
if (password_verify($db_password, $user_password)) {
echo "1";//doesnot execute
}
}
else
{
echo "false";
}
}
任何建议?
答案 0 :(得分:3)
password_verify()
将明文密码作为其第一个参数 - 而不是密码的哈希值!
删除包含password_hash()
调用的行。而且,正如cristianorbs所提到的,数据库中的哈希值应该是第二个参数。
(您可能还希望将用户名作为参数传递给查询 - 否则,您将只能拥有一个管理员用户。)
答案 1 :(得分:2)
您确定参数是否以正确的顺序传递给password_verify? 文档中对方法的描述说它是倒置的:
boolean password_verify ( string $password , string $hash )
由于您的哈希来自数据库,您可能应该像这样传递它:
password_verify($user_password, $db_password)