CodeIgniter 中的密码散列和验证
Password Hashing and Verify in CodeIgniter
所以我在尝试使用数据库中存储的密码登录用户时遇到了问题:
我目前的登录功能和模型是这样的:
控制器:
$username = $this->input->post('username');
$password = $this->input->post('password');
$enc_password = password_hash($password, PASSWORD_DEFAULT);
$data_user = $this->User_model->login($username, $enc_password);
型号:
public function login($username, $enc_password)
{
$this->db->where('username', $username);
$this->db->where("password", $enc_password);
$this->db->where("password2", $enc_password);
$query = $this->db->get($this->table);
$hashed_password = $enc_password;
if (password_verify($hashed_password, $hashed_password)) {
return $query->row();
} else {
return false;
}
}
谁能告诉我我的错误在哪里?我试图在输入的密码与创建相同的 "password" 和 "password2" 匹配后登录用户(在注册函数中;相同的密码哈希)但由于某种原因它不允许即使我输入正确的密码也是如此。 :/
提前致谢。
就像我在评论中提到的那样,不要触摸(应用)输入密码上的任何内容。
首先根据用户名获取行。获取散列密码并与输入的密码进行比较。
想法是这样的:
public function login($username, $password)
{
// fetch by username first
$this->db->where('username', $username);
$query = $this->db->get($this->table);
$result = $query->row_array(); // get the row first
if (!empty($result) && password_verify($password, $result['password'])) {
// if this username exists, and the input password is verified using password_verify
return $result;
} else {
return false;
}
}
只需确保您的用户 password_hash
设置了密码 table(我假设您已经处理了这部分)。
所以用法是这样的:
$username = $this->input->post('username');
$password = $this->input->post('password');
$data_user = $this->User_model->login($username, $password);
只需输入密码,登录时无需散列。您在注册时使用password_hash
。
确定,您刚刚在数据库中存储了散列密码
在你的控制器中
$username = $this->input->post('username');
$password = $this->input->post('password');
$data_user = $this->User_model->login($username, $password);
在你的模型中
public function login($username, $password)
{
$query = $this->db->query("SELECT * from table where username = $username");
$row = $query->row();
if (password_verify($password,$row->password)) {
return $query->row();
} else {
return false;
}
}
所以我在尝试使用数据库中存储的密码登录用户时遇到了问题:
我目前的登录功能和模型是这样的:
控制器:
$username = $this->input->post('username');
$password = $this->input->post('password');
$enc_password = password_hash($password, PASSWORD_DEFAULT);
$data_user = $this->User_model->login($username, $enc_password);
型号:
public function login($username, $enc_password)
{
$this->db->where('username', $username);
$this->db->where("password", $enc_password);
$this->db->where("password2", $enc_password);
$query = $this->db->get($this->table);
$hashed_password = $enc_password;
if (password_verify($hashed_password, $hashed_password)) {
return $query->row();
} else {
return false;
}
}
谁能告诉我我的错误在哪里?我试图在输入的密码与创建相同的 "password" 和 "password2" 匹配后登录用户(在注册函数中;相同的密码哈希)但由于某种原因它不允许即使我输入正确的密码也是如此。 :/
提前致谢。
就像我在评论中提到的那样,不要触摸(应用)输入密码上的任何内容。 首先根据用户名获取行。获取散列密码并与输入的密码进行比较。
想法是这样的:
public function login($username, $password)
{
// fetch by username first
$this->db->where('username', $username);
$query = $this->db->get($this->table);
$result = $query->row_array(); // get the row first
if (!empty($result) && password_verify($password, $result['password'])) {
// if this username exists, and the input password is verified using password_verify
return $result;
} else {
return false;
}
}
只需确保您的用户 password_hash
设置了密码 table(我假设您已经处理了这部分)。
所以用法是这样的:
$username = $this->input->post('username');
$password = $this->input->post('password');
$data_user = $this->User_model->login($username, $password);
只需输入密码,登录时无需散列。您在注册时使用password_hash
。
确定,您刚刚在数据库中存储了散列密码
在你的控制器中
$username = $this->input->post('username');
$password = $this->input->post('password');
$data_user = $this->User_model->login($username, $password);
在你的模型中
public function login($username, $password)
{
$query = $this->db->query("SELECT * from table where username = $username");
$row = $query->row();
if (password_verify($password,$row->password)) {
return $query->row();
} else {
return false;
}
}