我正在学习如何使用CI框架,目前正在处理用户登录表单。 Haven尚未创建用户注册,因此我手动将凭据添加到数据库中。由于我在本地测试了所有内容,因此我决定尝试使用无盐,这可能不是最好的方法。我使用表单验证和回调来根据数据库中的信息检查表单数据。
这是来自用户控制器的片段:
function password_check($password) {
$username = $this->input->post('username', TRUE);
$password = Modules::run('security/create_hash', $password);
$this->load->model('mdl_users');
$result = $this->mdl_users->password_check($username, $password);
if ($result == FALSE) {
//$this->form_validation->set_message('password_check', 'Please login using the correct credentials!');
//return FALSE;
echo $password;
echo '<br/><br/>';
echo $result;
echo '<br/><br/>';
}
else {
return TRUE;
}
}
我回复了密码,测试结果和密码显示为哈希。
这是password_check方法:
function password_check($username, $password) {
$table = $this->get_table();
$this->db->where('username', $username);
$this->db->where('password', $password);
$query=$this->db->get($table);
$num_rows = $query->num_rows();
return $num_rows;
if ($num_rows>0) {
return TRUE;
} else {
return FALSE;
}
}
我确定这不起作用的原因是因为DB中的密码被视为文字字符串而不是哈希值,但我不知道我怎么做将其比作哈希。
答案 0 :(得分:0)
您可以执行以下操作:从模型中获取用户,然后使用用户的散列值检查密码中保存的值。如果你使用md5,它看起来会有点像这样。
控制器
$this->load->model('user_model');
public function login() {
$name = $this->input->post('name');
$password = $this->input->post('password');
$user = $this->user_model->get_user_through_name($name);
if($user['password'] == md5($password)) {
//logged in
} else {
//wrong password
}
}
模型
public function get_user_through_name($name) {
$query = $this->db->get_where('Users', array(
'username' => $name
));
return $query->row_array();
}