我正在使用Codeigniter 3.1.8和Bootstrap 4开发一个基本的博客应用程序。
该应用程序允许注册和登录。
过去使用md5()函数加密的密码:
$enc_password = md5($this->input->post('password'));
在登录控制器中,我有:
public function login() {
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email');
$this->form_validation->set_rules('password', 'Password', 'required|trim');
$this->form_validation->set_error_delimiters('<p class="error-message">', '</p>');
if ($this->form_validation->run()) {
$email = $this->input->post('email');
$password = $this->input->post('password');
$this->load->model('Usermodel');
$current_user = $this->Usermodel->user_login($email, $password);
// If we find a user
if ($current_user) {
// If the user found is active
if ($current_user->active == 1) {
$this->session->set_userdata(
array(
'user_id' => $current_user->id,
'user_email' => $current_user->email,
'user_first_name' => $current_user->first_name,
'user_is_admin' => $current_user->is_admin,
'user_active' => $current_user->active,
'is_logged_in' => TRUE
)
);
并在模型中:
public function user_login($email, $password) {
$query = $this->db->get_where('authors', ['email' => $email, 'password' => $hashed_password]);
return $query->row();
}
我有安全问题,所以我在Register控制器中替换md5()为:password_hash()
$enc_password = password_hash($this->input->post('password'), PASSWORD_DEFAULT);
注册工作正常,数据库中的密码字符串比以前更安全。
我已将user_loginUser 模型中的更新为:
public function user_login($email, $password) {
$query = $this->db->get_where('authors', ['email' => $email, 'password' => $hashed_password]);
return $query->row();
}
其中$hashed_password来自登录控制:
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
令我惊讶的是,这种密码匹配不起作用。
为了使其工作,我必须对我的登录代码进行最少的更改?
一只萌萌小番薯
PIPIONE