我正在尝试重定向到在Codeigniter中的会话中存储电子邮件的用户的主页。我已经使用password_hash($this->input->post('password'), PASSWORD_DEFAULT))
来对密码进行哈希处理,并且可以正常工作,但是当我尝试password_verify()
时,它将失败。
这是我的模特
public function canLogin($email, $password) {
$this->db->where('email',$email);
$query = $this->db->get($this->tableName);
$row = $query->row();
if ($row) {
return password_verify($password, $row->password);
}
else {
return false;
}
}
这是我的控制器
public function loginValidation() {
// User Model Loaded in constructor
if ($this->user->canLogin($_POST['email'], $_POST['password'])) {
$session_data = array('email' => $_POST['email'] );
$this->session->set_userdata($session_data);
redirect('profile/personal','Refresh');
} else {
echo 'fail';
$this->session->set_flashdata('error', 'Invalid Username or Password');
// redirect('login','Refresh');
}
}
我不知道逻辑出了什么问题,每次都重定向到同一登录页面,我正在尝试对其进行身份验证,将电子邮件存储在会话中并将其重定向到profile/personal
,任何人都可以指出我错过的地方逻辑?
答案 0 :(得分:3)
@YashKaranke密码列的长度是多少? – Funk Forty Niner
@FunkFortyNiner数据类型为varchar的值为50 – Yash Karanke
“密码”列的长度太短,应按照the manual on PHP.net for password_hash()
的建议为60或255。
您现在必须从新哈希开始。
验证失败。
答案 1 :(得分:1)
如果您使用的是:
password_hash($this->input->post('password', PASSWORD_DEFAULT));
您确定此哈希正确吗?不应该是:
password_hash($this->input->post('password'), PASSWORD_DEFAULT);