PHP密码_验证codeigniter3

我对password_verify 没有什么问题。我使用 codeigniter 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 获取哈希密码,则它不起作用。


谢谢你的支持,


慕姐8265434
浏览 100回答 1
1回答

慕运维8079593

正如 php.net所解释的 password_verify()那样,验证通过password_hash().如果您使用 sha256 哈希,您可以更好地对用户输入进行哈希处理并与数据库查询的密码进行比较,如下所示:$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') 因为它会为您进行安全过滤。
打开App,查看更多内容
随时随地看视频慕课网APP