2011-08-16 35 views
0

如果用戶沒有登錄我想覆蓋現有的控制器,並調用auth/login之一,而不是保持瀏覽器URI的機智。 (每個用戶必須登錄才能使用該站點)代碼點火器2 - 控制器/方法覆蓋

我已經嘗試過預控制器掛鉤,但它太早。此時auth庫尚未實例化。 由於目標控制器已被實例化,後控制器掛鉤已經太晚了。

編輯庫的構造似乎也沒有意義,因爲它已經被創建..所以我有點卡住..

任何想法嗎? :) ..

感謝

回答

4

我會覆蓋默認控制器並在每個控制器中擴展。下一個代碼./app/core/MY_Controller.php:創建一個新的文件

class Secure_Controller extends CI_Controller { 

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

     /* replace this code with yours */ 
     if(!$this->session->userdata('logged_in')) { 
      redirect(base_url() . 'login', 'refresh'); // your login url 
     } 
    } 
} 

然後,使用每個控制器此代碼,您應該記錄的用戶

class Main extends Secure_Controller { 
+0

很好的答案。這將顯示你如何做到這一點http://philsturgeon.co.uk/news/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY –

+0

感謝您的答覆。我將這與一個名爲_remap的方法結合起來作爲一種代理。再次感謝。 – Lee

0

你有沒有考慮剛保存的URI來flashdata,訪問者重定向到另一個控制器(登錄頁面),然後只是把引薦到一個隱藏的表單字段?我在使用Codeigniter的一個網站上做同樣的事情,它工作正常。唯一的區別是在這個過程中URI並不完整。

+0

我可以訪問認爲它認爲我不知道「如何」確定是..如果黑客阻止任何重定向發生不會控制器只是繼續和完成..重定向是否停止代碼點火器執行過程? – Lee