1

我正在使用来自https://github.com/dwightwatson/codeigniter-bcrypt的 codeigniter-bcrypt和 codeigniter。我有一个将发布数据提交到我的主控制器的表单。然后我通过模型检查数据库的记录。我用过

$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);
        }

任何帮助,将不胜感激。

4

2 回答 2

4

这不会:

  $this->db->where('password',$password);

您正在检查数据库中的实际原始密码。

您应该从数据库中获取哈希值,然后将其与用户密码进行比较:

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();
    }
}
于 2013-08-09T02:59:31.493 回答
0

您应该使用默认的 php 哈希函数

$options = [ 'cost' => 12, ]; echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);
于 2019-06-20T15:37:26.793 回答