Php password_verify codeigniter3



我对password_verify没什么问题。 我使用代码点火器3进行研究。

我有用户模型

<?php
class User_model extends CI_Model{
public function __construct()
{
parent::__construct();
$this->load->database();
}
public function createUser($args): int
{
$query = $this->db->insert('user', $args);
return $this->db->affected_rows();

}
public function getUser(string $email): array
{
$query = $this->db->get_where('user',array('email'=> $email));
return $query->row_array();
}
}

用户控制器

<?php

class UserController extends CI_Controller{
public function __construct()
{
parent::__construct();
$this->load->model('user_model');
$this->load->helper('url_helper');
}
public function profile()
{
$data['user'] = $this->user_model->getUser($_POST['email']);
$hash = $data['user']['password'];
if(password_verify($_POST['password'],$hash)){
echo "success";
}else{
echo "failed";
}
$this->load->view('templates/header');
$this->load->view('pages/profileUser',$data);

}

如果我在控制器静态密码中使用它是有效的,如果我通过数据库函数获得哈希密码password_verify不起作用。

感谢您的支持,

正如php.net 所解释的那样password_verify()验证通过password_hash()创建的密码。

如果使用 sha256-hash,则可以更好地对用户输入进行哈希处理,并与数据库查询的密码进行比较,如下所示:

$password = $this->input->post('password');
if(hash('sha256', $password) == $hash) {
echo 'success';
} else {
echo 'failed';
}

在我看来,更好的方法是在查询中即时检查密码,如下所示:

$user_query = $this->db->get_where('users', array('email' => $email, 'password' => hash('sha256', $password));
if($user_query->num_rows() == 0) {
print 'failed';
} else {
print 'success';
$user = $user_query->row_array();
...
}

顺便说一句:最好使用CodeIgniters $this->input->post('password'(,因为它会为您进行安全过滤。

相关内容

  • 没有找到相关文章

最新更新