簡體   English   中英

CodeIgniter在每個Controller中對用戶進行身份驗證

[英]CodeIgniter authenticate the user in every Controller

我正在使用Tank_auth處理CMS身份驗證,在Codeigniter中構建我的第一個項目。

一切正常,但我對最佳做法有疑問。 當前,每個控制器中的每個功能都具有以下結構:

public function add()
    {
        if ($this->tank_auth->is_logged_in())
        {

            $data['stuff'] = 'stuff';

            $this->load->view('admin/cms_add',$data);


        } else
        {
            redirect('/admin/login/');  
        }
    }

有了很多控制器,每個控制器中都有一些功能,它開始變得很重復,我想知道這是否是正確的解決方法,或者是否有一種更干凈的方法來確保未登錄的用戶無法訪問這些功能。

提前致謝。

如果every method in every controller都應檢查用戶是否已登錄,則可以在每個控制器中使用__construct()方法,如下所示:

public function __construct()
{
    parent::__construct();

    if (! $this->tank_auth->is_logged_in()) {
        redirect('/admin/login/');
    }
}

您還可以擴展CI控制器並創建自定義MY_Controller並檢查其中的if語句。 那么控制器僅接受登錄的用戶,應該繼承My_Controller

application/core/MY_Controller.php

class MY_Controller extends CI_Controller {

    public function __construct()
    {
        // Execute CI_Controller Constructor
        parent::__construct();

        if (! $this->tank_auth->is_logged_in()) {
            redirect('/admin/login/');
        }
    }
}

application/controllers/welcome.php

class Welcome extends MY_Controller {

    function __construct()
    {
        parent::__construct();
    }

    function index()
    {
        $this->load->view('welcome_message');
    }
}

參閱CI用戶指南以獲取更多信息。

我也是這樣做的。 沒有更好的方法,因為您可能擁有對未登錄用戶可見的控制器,因此無法將其添加到構造函數或其他內容中。

最好的,而且我認為最干凈的方法是將其添加到每個功能標准中。 這樣,如果您希望每個人都可以公開該控制器功能,則始終可以對其進行編輯。

不允許任何人使用的功能可以設置為私有。

private function add()
    { 
         // do private stuff
    }

因此,最好使用當前代碼:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM