【问题标题】:CodeIgniter User AuthenticationCodeIgniter 用户身份验证
【发布时间】:2012-09-07 12:29:24
【问题描述】:

我已成功使用 code igniter 对用户进行身份验证,但现在如果用户在我的一个控制器中输入一个方法的路由,他们无需登录即可访问它。

我想停止对未登录的用户进行此访问,最好不使用第 3 方用户身份验证插件。

我有这个型号代码:

function login(){
    $data = array(
        'username' => $this->input->post('username'),
        'logged_in' => TRUE
    );
    $this->session->set_userdata($data);
} //function login()
function logged_in(){
    if($this->session->userdata('logged_in') == TRUE)
    {
        return TRUE;
    }
    return FALSE;
} //function logged in()

我有这个控制器代码:

    function index($condition = FALSE){
    if($this->admin_model->logged_in() === TRUE)
    {
        $this->books_page(TRUE);
    }
    else
    {
        $data = $this->style_model->admin_area();
        $data['page_intro'] = 'Oops! Sorry, you must be logged in to view this page.';
        $this->load->view('admin/not_logged_in', $data);
    }
} //function index()
    function books_page(){
        $data = $this->style_model->admin_area();
        $data['category_query'] = $this->admin_books_model->get_book_categories();
        $data['page_title'] = 'Books';
        $data['query'] = $this->admin_books_model->get_books();         
        $this->load->view('admin/books/books_admin', $data);
    }    //function books_page()

尚未登录的用户无法访问书籍方法,但之后他们可以访问任何其他方法,我只是想停止该访问并将错误页面传递给他们,通知他们必须登录。

提前致谢, 汤姆

【问题讨论】:

  • 只是想一想,您可能会考虑进入TankAuth for CodeIgniter。它非常安全,一旦您学会它,生活就会非常变得轻松。 FWIW。

标签: codeigniter login


【解决方案1】:

最好的方法是将你的逻辑分成两个(或更多)控制器。

  • “前端”控制器 - 用户无需登录 任何一个都可以
  • “后端”控制器 - 用户必须位于的位置 全部登录

在您的后端控制器中执行此操作

class Backend extends CI_Controller 
{
    public function  __construct()
    {
        parent::__construct();
        if( ! ($this->admin_model->logged_in())
        {
            // Not logged in - so force them away
            redirect ('place login page here');
       }
    }
 }

然后backend 控制器中的所有内容都受到保护。

为了进一步了解这个概念 - 研究使用 MY_Controller 并让您的所有后端控制器都从这里扩展。

【讨论】:

  • 大家好,感谢您的帮助我真的很感激,起初我尝试了 Slave 的答案,这很有效,但是我喜欢使用 MY_Controller 类(TheShiftExchange Answer)的想法,因为它更多高效并使用更少的代码(不重复)。我对此进行了一些研究,现在我可以使用它了,再次感谢大家真的很感激。
【解决方案2】:

要么我误解了你的问题,要么解决方案非常简单。

function books_page() {
   if(!$this->admin_model->logged_in()) {
      redirect('auth/login'); ## OR $this->load->view("error_page"); exit();
   }
   ## All your code, etc.
}

【讨论】:

    【解决方案3】:

    我会像这样在控制器顶部声明一个变量:

    private $logged_in = false;
    

    然后在构造函数中我会像这样初始化它:

    $this->logged_in = $this->session->userdata('logged_in');
    

    然后您可以禁用对所需方法的访问(如果您将检查放入构造函数,则可以禁用完整的控制器):

    if($this->logged_in)
    {
       //do stuff
    }
    else
    {
       redirect(base_url().'login');
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-26
      • 2010-10-02
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 2016-04-12
      • 1970-01-01
      • 2012-12-07
      相关资源
      最近更新 更多