我正在使用来自https://github.com/dwightwatson/codeigniter-bcrypt的codeigniter-bcrypt,以及codeigniter。我有一个表单正在向我的主控制器提交post数据。然后,我通过一个模型检查记录的DB。我已经使用了
$hash = $this->bcrypt->hash_password($password);在创建帐户时对密码进行哈希处理。而且它是有效的。密码在数据库中进行了正确的哈希处理。然而,现在我不确定在哪里可以使用相反的方法来检查在表单中输入的密码是否与数据库的散列密码相同。
if ($this->bcrypt->check_password($password, $stored_hash))
{
// Password does match stored password.
}
else
{
// Password does not match stored password.
} 我的模型中的代码是
function getUserByLogin($login, $password) {
$this->db->where('login',$login);
$this->db->where('password',$password);
$result = $this->getUsers();
if (count($result) > 0) {
return $result[0];
} else {
return null;
}
}
function getUsers() {
$query = $this->db->get('users');
if ($query->num_rows() > 0) {
return $query->result();
} else {
return array();
}
}和我的控制器
if (isset($_POST['email']) && isset($_POST['password'])) {
$login = $_POST['email'];
$password = $_POST['password'];
$user = $this -> user_model -> getUserByLogin($login, $password);
$this -> saveUserToSession($user);
$loggedIn = ($user == null ? false : true);
}任何帮助都将不胜感激。
发布于 2013-08-09 10:59:31
这样做是不可行的:
$this->db->where('password',$password);您将在DB中检查实际的原始密码。
您应该从数据库中获取散列,然后将其与用户的密码进行比较:
function getUserByLogin($login, $password) {
$this->db->where('login',$login);
$result = $this->getUsers($password);
if (!empty($result)) {
return $result;
} else {
return null;
}
}
function getUsers($password) {
$query = $this->db->get('users');
if ($query->num_rows() > 0) {
$result = $query->row_array();
if ($this->bcrypt->check_password($password, $result['password'])) {
//We're good
return $result;
} else {
//Wrong password
return array();
}
} else {
return array();
}
}发布于 2019-06-20 23:37:27
你应该使用默认的php散列函数
$options = [ 'cost' => 12, ]; echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);https://stackoverflow.com/questions/18139178
复制相似问题