Как я могу решить эту проблему, если любой пароль войти в систему пользователя на codeigniter - PullRequest
0 голосов
/ 20 февраля 2020

Я пытался решить проблему с моим кодом, которая позволит любому паролю войти в систему на панели инструментов. Например, любой пользователь, зарегистрированный на платформе, может использовать свою электронную почту и любой пароль для входа в систему. Пароль сохраняется как ha sh в базе данных, но когда я хочу войти, любой пароль может войти в систему пользователя, который не должен , Например, 123456 будет входить в систему пользователя, а 656565656 может входить в систему от того же пользователя. Пожалуйста, помогите мне, я знаю, что где-то не правильно, но я не могу понять, где я ошибаюсь.

Вот мой контроллер:

public function __construct()
{
    parent::__construct();
    $this->load->database();
    $this->load->helper('url');
}

public function index()
{
    $this->form_validation->set_rules('emailid','Email id','required|valid_email');
    $this->form_validation->set_rules('password','Password','required|min_length[6]');
    if($this->form_validation->run())
    {
        $emailid=$this->input->post('emailid');
        $password=password_verify($this->input->post('password'),$account->password);
        $status=1;  

        $this->load->model('User_Login_Model');
        $validate=$this->User_Login_Model->validatelogin($emailid,$password,$status);
        if($validate)
        {
            $this->session->set_userdata('uid',$validate);
            redirect('user/dashboard');
        } else
        {
            $this->session->set_flashdata('error', 'Invalid details. Please try again with valid details');
            redirect('user/login');
        }
    }
}

Вот мой файл модели для входа в систему пользователя

public function __construct()
{
    parent::__construct();
    $this->load->database();
    $this->load->helper('url');
}

public function validatelogin($emailid,$password,$status)
{

    $query=$this->db->where(['emailId'=>$emailid,'userPassword'=>$password]);
    $account=$this->db->get('tblusers')->row();
    if($account!=NULL)
    {
        $dbstatus=$account->isActive;
        //verifying status
        if( $dbstatus==$status)
        {
            return $account->id;
        } 
        else 
        {
            return NULL;
            $this->session->set_flashdata('error', 'Your accounis is not active contact admin');
            redirect('user/login');
        }
    }
    return NULL;
}

login.php file

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Попробуйте: -

Контроллер

public function index()
{
    $this->form_validation->set_rules('email', 'E-mail address', 'required|valid_email')
        ->set_rules('password', 'Password', 'required');

    if ($this->form_validation->run() == false)
    {
        // validation errors
        var_dump(validation_errors());
    }
    else
    {

        $this->load->model('user_login_model');
        $user = $this->user_login_model->validatelogin($this->input->post('email'));

        if (!empty($user))
        { 
            $verify_hash = password_verify($this->input->post('password'), $user->userPassword);

            if($user->isActive != 1)
            {
                $this->session->set_flashdata('error', 'Your accounis is not active contact admin');
                redirect('user/login');
            }
            else if ($verify_hash)
            {
                // login success
                $this->session->set_userdata('uid', $user->id);
                redirect('user/dashboard');
            }
        } 

        $this->session->set_flashdata('error', 'Invalid credentials');
        redirect('user/login');
    }
}

Модель

public function validatelogin($email)
{
    return $this->db->get_where('tblusers', array('emailId' => $email))
        ->row();
}
0 голосов
/ 20 февраля 2020

Ваш вопрос: когда вы пытаетесь войти в аккаунт с неверным паролем, он все равно переносит вас на панель пользователя. Правильно?

Это потому, что вы не сравниваете пароль из базы данных.

Ниже приведен код, который может вам помочь:

My_model. php

public function check_login_model(){
    $email = $this->input->post('email');
    $password = $this->input->post('password');
    $query = $this->db->query("SELECT * FROM login_table WHERE email='$email' AND password='$password' LIMIT 1");
    $row = $query->row_array();
    $count = $query->num_rows();
    if ($count==1) {
        $this->session->login_user = $email;
    }else{
        return "No records found.";
    }
}

My_controller. php

public function index(){
    if ($this->session->login_user) { 
        $this->load->view('user/dashboard');
    }else{
        $this->load->view('user/login'); 
    }
}

I надеюсь, что этот простой метод входа может помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...