我正在尝试在CodeIgniter中实现登录实施,我在控制器中像Null
一样在注册时对密码进行哈希处理,并且在同一控制器中,我尝试编写一种登录方法,如下所示:
password_hash($this->input->post('password'),PASSWORD_DEFAULT)
我的用户模型功能是
public function loginValidation() {
$this->form_validation->set_rules('email', 'Email', 'trim|required');
$this->form_validation->set_rules('password', 'Password', 'trim|required');
if ($this->form_validation->run()) {
// true
$email = $this->input->post('email');
$password = $this->input->post('password');
// User Model Loaded in constructor
if ($this->user->canLogin($email, $password)) {
$session_data = array('email' => $email );
$this->session->set_userdata($session_data);
redirect('profile/personal','Refresh');
} else {
$this->session->set_flashdata('error', 'Invalid Username or Password');
//redirect('login','Refresh');
}
} else {
// try again to login
//redirect('login','Refresh');
}
}
我知道我必须public function canLogin($email, $password) {
$this->db->where('email',$email);
$this->db->where('password',$password);
$query = $this->db->get($this->tableName);
if ($query->num_rows() > 0) {
return true;
} else {
return false;
}
}
,但我无法弄清楚。
如何通过电子邮件验证密码并重定向到所需的视图,即password_verify($string,$hash)
,并且正在通过AJAX调用进行请求。
答案 0 :(得分:4)
您需要做的是从只有电子邮件匹配的数据库中获取记录(假设它是唯一键)。然后,您使用password_verify()
比较返回的值。
这是非常粗糙且未经测试的,但是应该给您一个想法:
public function canLogin($email, $password) {
$this->db->where('email',$email);
// $this->db->where('password',$password);
$query = $this->db->get($this->tableName);
$row = $query->row();
return $row ? password_verify($password, $row->password) : false;
}