0

我正在登录用户。因此,在用户输入电子邮件和密码后,我想检查具有该电子邮件和密码的用户是否存在。出于这个原因,我使用了两次 where 子句,但不知何故它不起作用。也许是因为我使用不正确。如何修复我的以下代码

$this->db->where('email', $this->input->post('email'));
$this->db->where('password', $pass . $salt);
4

2 回答 2

0

哪里工作正常,第二个是错误的,你传递了密码+盐,但你没有编码任何东西,只是连接它们。因此,如果您的密码是 bob 并且您的 salt 是胡椒,那么您将 bobpepper 作为密码字段传递给查询。

根据加密,您的代码应类似于以下内容:

 $password = md5($this->input->post('password'). $salt);  //swap the md5 for whatever encryption method you're using.
 $this->db->where('email', $this->input->post('email'));
 $this->db->where('password', $password);
于 2012-11-19T19:21:42.343 回答
0

您不需要执行两次 where 子句。

public function login(){

    try
    {
        $user = $this->db->select()->where()->get(); // mysql query

        if( !$user)
            throw new Exception("User not found!");

        if( !$this->compare_password($this->input->post('password'), $user->password ) )
            throw new Exception("Passwords did not match!");
    }
    catch(Exception $e) 
    {
        $this->session->set_flashdata('error', $e->getMessage());
        log_message('error', $e->getMessage()); 
        redirect('/');
    }

    //we got this far so everything should be OK

    $this->session->set_flashdata('success', 'Login Successfull');
    redirect('dashboard');
}

注意:您可能希望在生产模式下使用比这更好的密码哈希算法!!

protected function hash_password($password){
    return sha1( $pw . $this->config->item('encryption_key') );
}

protected function compare_password($pw, $dbpw){
    return ( sha1($pw . $this->config->item('encryption_key') ) === $dbpw )
}
于 2012-11-19T19:46:26.730 回答