Codeigniter使用codeigniter-bcrypt登录

时间:2013-08-09 02:12:21

标签: php codeigniter bcrypt

我正在使用https://github.com/dwightwatson/codeigniter-bcrypt的codeigniter-bcrypt和codeigniter。我有一个表单,将帖子数据提交给我的主控制器。然后,我通过模型检查DB的记录。我用过

$hash = $this->bcrypt->hash_password($password);

在帐户创建时哈希密码。它有效。密码在DB中正确散列。但是现在我不确定在哪里使用反向来检查在post的表单中输入的密码是否与DB的哈希密码相同。

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

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:0)

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

$options = [ 'cost' => 12, ]; echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);