使用bcrypt
解密密码时遇到问题。我使用此代码时无法登录。那么,有什么错误吗?
function login(){
if ($this->session->userdata('username'))
{
redirect('dasbor');
}
//fungsi login
$valid = $this->form_validation;
$username = $this->input->post("username");
$password = $this->input->post("password");
$hash = $this->db->get('users')->row('password');
$hashp = $this->bcrypt->check_password($password,$hash);
$valid->set_rules("username","Username","required");
$valid->set_rules("password","Password","required");
if ($hashp) {
if($valid->run()) {
$this->simple_login->login($username,$hashp, base_url("dasbor"), base_url("Auth/login"));
}
}
// End fungsi login
$data = array('title'=>'Halaman Login Admin');
$this->load->view('admin/login_view',$data);
}
请帮我解决这个问题。
答案 0 :(得分:2)
我知道这是一个老问题,但我想帮助其他面临相同问题的人。
首先,您需要对算法进行重新处理。 password_verify()
函数需要2个参数:
Password
,即用户提交表单之前在文本字段中输入的文本。Hash
,已经存储在数据库中的哈希。目标是验证Password
和Hash
是否相似。如您所知,即使您对相同的字符串进行哈希处理,password_hash()
也会在不同的时间返回不同的结果。因此,您不能使用this->db->where()
有效记录。
所以,我要做的是以下两个简单的步骤:
在模型中创建一个函数(例如Main_model.php
)以获取用户数据。
public function get_user($user) {
$this->db->where('username', $user);
return $this->db->get('user')->row_array();
}
从控制器获取密码并使用password_verify
$get_user = $this->main_model->get_user($this->input->post('username'));
if(password_verify($this->input->post('password'), $get_user['password'])){
// Success
}
else {
// Not Success
}
还有一个提示,不要在Controller中写入任何活动记录。 MVC方法并不整齐。