无法使用我的哈希密码登录,但有些用户首先将其保存而不进行散列,并且可以登录

问题描述 投票:-1回答:1

我无法验证密码是否经过哈希处理,这就是为什么我无法登录,但是如果我手动将用户插入未对密码进行哈希处理的数据库,它将起作用。

这是我的控制器

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>
codeigniter authentication passwords verification password-hash
1个回答
0
投票

在控制器中的使用方法如:

$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();
    }

希望它会有所帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.