2015-02-07 189 views
1

您好我是CodeIgniter的新手,目前正在開發一個基本上是admin/user系統的項目。CodeIgniter用戶/管理員登錄

目前我已經能夠創建登錄表單,並且可以在檢查用戶存在後成功獲取用戶登錄。

我只是想指出正確的方向,我可以如何去這個能夠登錄一個普通用戶到成員頁面,並且管理員用戶到管理頁面。

這就是我目前所擁有的功能,它使用bootstrap作爲前端框架完全運行。但允許我的成員表中的任何用戶登錄。

查看:

<?php $attributes = array("class" => "form-horizontal", "id" => "loginform", "name" => "loginform"); 
       echo form_open("login/loginchk", $attributes);?> 
       <h2>Please Login</h2> 
       <hr> 
       <fieldset> 
       <!--<legend>Login</legend>--> 
       <div class="form-group"> 
       <div class="row colbox"> 
       <div class="col-lg-4 col-sm-4"> 
        <label for="txt_username" class="control-label">Username</label> 
       </div> 
       <div class="col-lg-8 col-sm-8"> 
        <input class="form-control" id="txt_username" name="txt_username" placeholder="Username" type="text" value="<?php echo set_value('txt_username'); ?>" /> 
        <span class="text-danger"><?php echo form_error('txt_username'); ?></span> 
       </div> 
       </div> 
       </div> 

       <div class="form-group"> 
       <div class="row colbox"> 
       <div class="col-lg-4 col-sm-4"> 
       <label for="txt_password" class="control-label">Password</label> 
       </div> 
       <div class="col-lg-8 col-sm-8"> 
        <input class="form-control" id="txt_password" name="txt_password" placeholder="Password" type="password" value="<?php echo set_value('txt_password'); ?>" /> 
        <span class="text-danger"><?php echo form_error('txt_password'); ?></span> 
       </div> 
       </div> 
       </div> 

       <div class="form-group"> 
       <div class="col-lg-12 col-sm-12 text-center"> 
        <input id="btn_login" name="btn_login" type="submit" class="btn btn-default" value="Login" /> 
        <input id="btn_cancel" name="btn_cancel" type="reset" class="btn btn-default" value="Cancel" /> 
       </div> 

這裏是我的登錄控制器(login.php中):

public function loginchk() 
    { 
      //get the posted values 
      $username = $this->input->post("txt_username"); 
      $password = $this->input->post("txt_password"); 

      //set validations 
      $this->form_validation->set_rules("txt_username", "Username", "trim|required"); 
      $this->form_validation->set_rules("txt_password", "Password", "trim|required"); 

      if ($this->form_validation->run() == FALSE) 
      { 
       $data["title"] ="SmartAgent"; 
       //validation fails 
       $this->load->view("site_header"); 
       $this->load->view("content_home", $data); 
       $this->load->view("site_footer"); 
      } 
      else 
      { 
       //validation succeeds 
       if ($this->input->post('btn_login') == "Login") 
       { 
        //check if username and password is correct 
        $usr_result = $this->login_model->get_user($username, $password); 
        if ($usr_result > 0) //active user record is present 
        { 
         //set the session variables 
         $sessiondata = array(
           'username' => $username, 
           'loginuser' => TRUE 
         ); 
         $this->session->set_userdata($sessiondata); 
         redirect("site/members"); 
        } 
        else 
        { 
         $this->session->set_flashdata('msg', '<div class="alert alert-danger text-center">Invalid username and password!</div>'); 
         redirect('site/home'); 
        } 
       } 
       else 
       { 
        redirect('site/home'); 
       } 
      } 

這裏是一個引導到會員頁面(site.php)控制器內的代碼:

public function members(){ 
      $data["title"] ="Admin Panel"; 
      $this->load->model("notifications"); 

      if ($this->session->userdata('loginuser')){ 
      $this->load->view("site_header"); 
      $this->load->view("site_nav"); 
      $this->load->view('members', $data); 
      $this->load->view("site_footer"); 
     } else { 
      redirect('site/restricted'); 
     } 
    } 

終於在這裏是我的模型(login_model.php):

 function get_user($usr, $pwd) 
    { 
      $this->db->where('username', $usr); 
      $this->db->where('password', md5($pwd)); 
      $query = $this->db->get('members'); 
      //echo $query; 
      return $query->num_rows(); 
    } 
} 

爲了澄清我有兩個控制器,我的主控制器默認是site.php和登錄控制器login.php。總之,我的目標是能夠將admin用戶重定向到members.php,並且能夠將普通用戶重定向到agent.php(尚未創建)。

P.S我在PhpMyAdmin中的表中已經有一個名爲「admin」的列,我只是使用「是」或「否」來確定它們是否是。

+2

[Ion Auth是一個用於您的CodeIgniter的優秀認證庫](http://benedmunds.com/ion_auth/)應用程序,已經設置完成所有這些工作,包括各種用戶組。爲什麼重新發明輪子? – Sparky 2015-02-07 21:36:23

+1

@Sparky嗨,謝謝你的介紹,我將學習一下,因此我可以學到很多東西:) – 2015-02-07 22:43:11

回答

2

這裏是我的一個項目採取了一個例子:

 if ($this->form_validation->run()) 
     { 
      $user = $this->m_user->get_user_by_mail($this->input->post("login_mail")); 
      //Set session 
      $this->session->set_userdata(array('user' => $user)); 


      if($user->is_admin == 1) 
       redirect('BackOffice'); 
      else 
       redirect('FrontOffice'); 
     } 
     else 
     { 
      $data["view"] = "home"; 
      $this->layout->load_template($data); //This function do stuff an load a view 
     } 

在你的情況,你不能這樣做,因爲你的模型不返回你的用戶,但一個NUM行。 只要改變

return $query->num_rows(); 

通過

return $query->row(); 

然後你應該能夠測試,如果你的用戶是管理員或不是。

+0

嗨Adrien,謝謝你的回答我已經將num_rows()更改爲row()和現在當我登錄使用任何東西,如用戶名:等等等等等等等等。 – 2015-02-07 22:12:39

+0

@AbdushSamadMiah:可能是因爲如果($ usr_result> 0)沒有改變你的測試。試試如果($ usr_result) – AdrienXL 2015-02-07 22:15:12

+0

輝煌的工作! ......對不起,當你寫(if)($ user) - > is_admin == 1)時,如果你的db中有一列是「is_admin」,如果是的話,代碼是如何知道這一點的。還是我必須編寫一些代碼?如果「is_admin」是你寫這個的方法。在模型中?控制器?對不起,是一個nooob:/ – 2015-02-07 22:28:51