zabezpieczenie logowania

0

Witam ma problem przy tworzeniu skryptu, ktory sprawdza czy login i haslo sa zgodne z tymi z bazy oraz czy status uzytkownika wynosi 0. Napisalem go w ten sposob:
Kontroler validation jest wykonywany po kliknieciu przcisku zaloguj

  function validation()
       {
           $this->load->model('Users_model');
           $query = $this->Users_model->validate();
          

           if($query)
           {
               $data = array(
                 'username' => $this->input->post('username'),
                 'is_logged_in' => true
               );
               
              
               $this->session->set_userdata($data);
             
               $this->Users_model->set_LastLoginDate();

               $this->Users_model->set_Active();
               redirect('site');
            }
          else
           {
                redirect('ksiegarnia/error');
               $this->Users_model->set_LastFailedDate();
           }

           
       }

 

Model

 
function validate()
       {

           $this->db->where('USR_Nick', $this->input->post('username'));
           $this->db->where('USR_Pass', md5($this->input->post('pass')));
           $query = $this->db->get('users');
           $status = $this->check_status();

           if(($query->num_rows() == 1) && $status==true)
           {
               return true;
           }

           else
           {
               return false;
           }


           
       }

         function check_status()
       {
           $query = $this->db->query("select USR_Active from users where USR_Nick='".$this->input->post('username')."'")->row()->USR_Acive;
           if($query != 0)
           {
               print_r($query);
               return false;
           }

           else
           {
               return true;
           }

       }



  function set_Active()
       {
           $is_Active = array('USR_Active' => 1);
           $this->db->where('USR_Nick', $this->input->post('username'));
           $this->db->update('users', $is_Active);
       }







Ale niestety kod zawsze mnie przekierowuje na strone tylko dla zalogowanych uzytkownikow, mimo iz w bazie pole USR_Active = 1. Prosze o pomoc

0

W model->validate oprócz tego:

if(($query->num_rows() == 1) && $status==true)

musisz jeszcze sprawdzić, CO zostało zwrócone, bo tam sprawdzasz ILE REKORDÓW i czy w ogóle się udało zwócić.
Coś w ten deseń:

if(($query->num_rows() == 1) && $status==true && $query->rows[0][0]==1)

Ale to pseudokod, bo nie znam tego frameworka...

0

No wlanie o to chodzi. W funkcji validate najpierw wywoluje funkcje check status, ktora jezeli w bazie znajduje sie pole Active ustawione na 1 to zwraca false. Potem zapytania

 
 $this->db->where('USR_Nick', $this->input->post('username'));
 $this->db->where('USR_Pass', md5($this->input->post('pass')));
 $query = $this->db->get('users');

Zwracaja mi ilosc rekordow, czyli sprawdzam czy istnieje tylko jeden rekord ktory ma takie samo login i haslo. A nastepnie jezeli login i haslo pasuja do siebie i jedoczsnie status zwraca true, czyli jest ustawiony na 0. I wtedy nastepuje przekierowanie na strone dla zalogowanych uzytkownikow.

0

Faktycznie - nie zauwazylem. Ale jeśli to jest prawdziwy kod, to masz tam literówkę: USR_Acive, zamiast USR_Active

1 użytkowników online, w tym zalogowanych: 0, gości: 1