我无法验证密码是否经过哈希处理,这就是为什么我无法登录,但是如果我手动将用户插入未对密码进行哈希处理的数据库,它将起作用。
这是我的控制器
class User extends CI_Controller {
function __construct(){
parent::__construct();
$this->load->helper('url');
$this->load->model('User_model');
}
public function index(){
//load session library
$this->load->library('session');
//restrict users to go back to login if session has been set
if($this->session->userdata('user')){
redirect('Users');
}
else{
$this->load->view('login_page');
}
}
public function login(){
//load session library
$this->load->library('session');
$email = $_POST['email'];
$password = $_POST['password'];
$data = $this->User_model->login password_verify($email, $password);
if($data){
$this->session->set_userdata('user', $data);
redirect('Users');
}
else{
header('location:'.base_url().$this->index());
$this->session->set_flashdata('error','Invalid login. User not found');
}
}
public function home(){
//load session library
$this->load->library('session');
//restrict users to go to home if not logged in
if($this->session->userdata('user')){
$this->load->view('Users');
}
else{
redirect('/');
}
}
public function logout(){
//load session library
$this->load->library('session');
$this->session->unset_userdata('user');
redirect('/');
}
}
这是我的模特
class User_model extends CI_Model {
private $_table = "users";
public function get( $id = false )
{
if ($id) {
$this->db->where('id =', $id);
$query = $this->db->get($this->_table);
return $query->row_array();
}
$query = $this->db->get($this->_table);
return $query->result_array();
}
public function insert($data)
{
$data['password'] = password_hash($data['password'],PASSWORD_DEFAULT);
$this->db->insert($this->_table, $data);
}
public function update($data)
{
$id = $data['id'];
unset($data['id']);
$data['password'] = password_hash($data['password'],PASSWORD_DEFAULT);
$this->db->where('id =', $id);
$this->db->update($this->_table, $data);
}
public function delete($id)
{
$this->db->where('id', $id);
$this->db->delete($this->_table);
}
public function login($email,$password){
$query = $this->db->get_where('users', array('email'=>$email, 'password'=>$password));
return $query->row_array();
}
}
这是我的观点
<!DOCTYPE html>
<html>
<head>
<title>AGSCONTEK</title>
</head>
<body>
<h1>AGSCONTEK</h1>
<h3> Login </h3>
<form method="POST" action="<?php echo base_url(); ?>index.php/user/login">
<input placeholder="Email" type="email" name="email" required>
<input placeholder="Password" type="password" name="password" required>
<button type="submit" > Login</button>
</form>
<?php
if($this->session->flashdata('error')){
?>
<div class="alert alert-danger text-center" style="margin-top:20px;">
<?php
echo $this->session->flashdata('error');
?>
</div>
<?php
}
?>
</body>
</html>
在控制器中的使用方法如:
$data = $this->User_model->login($email, $password);
现在是模态:
public function login($email,$password){
$password = password_hash($password,PASSWORD_DEFAULT);
$query = $this->db->get_where('users', array('email'=>$email, 'password'=>$password));
return $query->row_array();
}
希望它会有所帮助:)