为了设计密码用户名身份验证,我尝试从表(成员资格)中检索"salt",并将其附加到密码中。然后用SHA256对该组合进行加密。但是当我写validate()函数如下时,出现了一个错误,
严重性:4096
消息:类CI_DB_mysql_driver的对象无法转换为字符串
代码:
public function validate(){
$this->db->where('username',$this->input->post('username'));
$salt=(string)$this->db->select('salt');
$this->db->where('password',hash('sha256',$this->input->post('password').$salt));
$query=$this->db->get('membership');
if($query->num_rows()==1){ return TRUE; }
}
如何解决问题?我使用的是codeigniter 2.1.2。非常感谢!
您需要创建两个独立的查询:
public function validate(){
$this->db->select('salt');
$this->db->where('username', $this->input->post('username', TRUE));
$salt = (string) $this->db->get('membership')->row()->salt;
$this->db->where('password',
hash('sha256', $this->input->post('password', TRUE). $salt));
$query=$this->db->get('membership');
if($query->num_rows()==1) {
return TRUE;
}
return FALSE;
}