2016-10-11 3 views
1

У меня возникли проблемы с управлением моим логином для веб-сайта. Я пробовал несколько разных методов и запросов, которые, похоже, приводят к одной и той же проблеме: метод, который я использую для проверки username и password, всегда возвращает false.UserName - функция проверки пароля, возвращающая «false»

Чтобы было легче понять, вот что я пытаюсь сделать:

  • файл контроллера вызовов просматривать страницу и запрашивает у пользователя username и password
  • Я использую callback функцию, чтобы установить правило для формы
  • функция callback называет модель-методе
  • метода возвращает модель TRUE, если регистрационные данные являются правильными и FALSE в противном случае.

Очевидно, это всегда возвращает FALSE как Войти никогда не работает ...

Я использую CodeIgniter.

файл контроллера:

class Login extends CI_Controller { 

    public function __construct() 
    { 
    parent::__construct(); 
    $this->load->helper(array('form', 'url')); 
    $this->load->library(array('form_validation', 'session')); 
    } 

    public function index() 
    { 
    $this->form_validation->set_rules('username', 'Username', 'callback_login_check[password]'); 

    if ($this->form_validation->run() == FALSE) { 
     //loading view as long as it is not correct 
     $this->load->view('login'); 
    } else { 
     //temporary successful login page 
     $this->load->view('success'); 
    } 
    } 

    public function login_check($usr, $pwd) 
    { 
    $this->load->database(); 
    $this->load->model('EZ_Query'); 

    $result = $this->EZ_Query->get_user_details($usr, $pwd); 

    if ($result == TRUE) { 
     return TRUE; 
    } else { 
     $this->form_validation->set_message('login_check', 'Password does not match Username'); 
     return FALSE; 
    } 
    } 
} 

Модель файла:

class EZ_Query extends CI_Model { 

    public function get_user_details($usr, $pwd) 
    { 
    $sql = "SELECT * 
       FROM PROFIL 
       WHERE USER = '$usr' 
       AND MDP = '$pwd'"; 

    $query = $this->db->query($sql); 

    if ($query->num_rows() == 1) { 
     $row = $query->row(); 

     //session variables 
     $data = array('name' => $row->NOMPROFIL, 
        'fname' => $row->PRENOMPROFIL, 
        'type' => $row->TYPEPROFIL); 
     $this->session->set_userdata($data); 

      return TRUE; 
    } else { 
     return FALSE; 
    } 
    } 
} 

менее полезным, здесь часть обзора Логин страницы:

<body> 
    <?php 
     echo validation_errors(); 
     echo form_open('Login'); 
     echo form_label('Username', 'username'); 
     echo form_input('username')."<br />"; 
     echo form_label('Password', 'password'); 
     echo form_password('password')."<br />"; 
     echo form_submit('sumbit', 'Enter'); 
     echo form_close(); 
    ?> 
    </body> 

Извините за плохой английский, и спасибо за ваш Помогите.

+0

У вас нет пароля пользователя hash перед хранением? –

+0

http://www.codeigniter.com/user_guide/general/styleguide.html#file-naming – user4419336

+0

Почему вы используете обратный вызов, например 'callback_login_check [password]' this? – Shihas

ответ

2

Я изменил несколько вещей здесь для вас попробовать

Я надеюсь, что вы используете хороший хэш паролей НЕ MD5 использовать http://php.net/manual/en/function.password-hash.php и http://php.net/manual/en/function.password-verify.php

Имя файла: login.php

<?php 

class Login extends CI_Controller { 

    public function __construct() { 
     parent::__construct(); 
     $this->load->helper(array('form', 'url')); 
     $this->load->library(array('form_validation', 'session')); 
     // Autoload the session because you may need it else where 
    } 

    public function index() { 
     // remove the word password from callback as it on the username 
     // login all ways good to use required 

     $this->form_validation->set_rules('username', 'Username', 'trim|required|callback_login_check'); 
     $this->form_validation->set_rules('password', 'Password', 'trim|required'); 

     if ($this->form_validation->run() == FALSE) { 

      //loading view as long as it is not correct 
      $this->load->view('login'); 

     } else { 

      //temporary successful login page 
      $this->load->view('success'); 
     } 
    } 

    public function login_check() 
    { 
     $usr = $this->input->post('username'); 
     $pwd = $this->input->post('password'); 

     $this->load->database(); // Autoload database best. 

     // Filename of model should be Ez_query.php and same with class only first letter upper case 

     $this->load->model('ez_query'); 

     $result = $this->ez_query->get_user_details($usr, $pwd); 

     if ($result == TRUE) { 
      return TRUE; 
     } else { 
      $this->form_validation->set_message('login_check', 'Password does not match Username'); 
      return FALSE; 
     } 
    } 
} 
+0

Аминь на хешировании Вольфганг. Я вижу много контроллеров входа здесь, которые не используют его – Brad

+0

Спасибо за вашу помощь, он отлично работает! Я использую sha1 для шифрования паролей. –

+0

Просто вы можете мне объяснить, почему использование функции обратного вызова со вторым параметром не работает? –

 Смежные вопросы

  • Нет связанных вопросов^_^