首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用codeigniter-bcrypt登录Codeigniter

使用codeigniter-bcrypt登录Codeigniter
EN

Stack Overflow用户
提问于 2013-08-09 10:12:21
回答 2查看 12.9K关注 0票数 1

我正在使用来自https://github.com/dwightwatson/codeigniter-bcrypt的codeigniter-bcrypt,以及codeigniter。我有一个表单正在向我的主控制器提交post数据。然后,我通过一个模型检查记录的DB。我已经使用了

代码语言:javascript
复制
$hash = $this->bcrypt->hash_password($password);

在创建帐户时对密码进行哈希处理。而且它是有效的。密码在数据库中进行了正确的哈希处理。然而,现在我不确定在哪里可以使用相反的方法来检查在表单中输入的密码是否与数据库的散列密码相同。

代码语言:javascript
复制
if ($this->bcrypt->check_password($password, $stored_hash))
{
    // Password does match stored password.
}
else
{
    // Password does not match stored password.
} 

我的模型中的代码是

代码语言:javascript
复制
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();
    }
}

和我的控制器

代码语言:javascript
复制
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);
        }

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-09 10:59:31

这样做是不可行的:

代码语言:javascript
复制
  $this->db->where('password',$password);

您将在DB中检查实际的原始密码。

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

代码语言:javascript
复制
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();
    }
}
票数 4
EN

Stack Overflow用户

发布于 2019-06-20 23:37:27

你应该使用默认的php散列函数

代码语言:javascript
复制
$options = [ 'cost' => 12, ]; echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18139178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档