2014-02-23 163 views
2

我想密碼保護整個CodeIgniter網站,但不是使用HTTP基本認證(Apache中的.htaccess,我使用Nginx)。密碼保護整個CodeIgniter網站

我想要的是一個CodeIgniter驅動的登錄頁面,可以訪問整個網站。如果用戶已經登錄,那麼CodeIgniter路由引擎仍會繼續使用,因爲如果我沒有此登錄頁面,它將會如此。

如果用戶未登錄,我可以將邏輯放置在每個重定向到登錄頁面的控制器的開始處,但這很容易出錯,因爲這是許多開發人員正在處理的大型項目。如果由於某種原因缺少這種邏輯,匿名用戶可以訪問應用程序的某些部分。

我想我想要的是在路由之前執行的東西,它檢查用戶是否登錄。在這裏有沒有一種標準的方法來鉤住代碼?

+1

核心文件夾中創建MY_Controller,從那裏鎖定您的工作和從它在你的其他控制器擴展。 – ahmad

+0

是的,我決定實施一個基於這篇博文的解決方案http://jondavidjohn.com/blog/2011/01/scalable-login-system-for-codeigniter-ion_auth – OregonTrail

回答

0

這是我的代碼的一部分。這對我的作品很大:)

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

類內延伸是CI_Controller {

private $secured = array('index', 'stats', 'completed', 'calculator', 'howitworks', 'inprogress'); 
public $data; 

public function __construct() 
{ 
    parent::__construct(); 
    // Loading library, helpers and models. 
    $this->load->library(array('form_validation','session')); 
    $this->load->helper(array('form', 'url')); 
    $this->load->model(array('world_trade', 'user_model', 'calculate', 'core_operations')); 

    if(in_array($this->uri->rsegment(2), $this->secured)) 
    { 
     if(!$this->user_model->is_login()) 
     { 
      show_404(); 
     } 
    } 

用戶模型:

public function is_login() 
{ 
    if($this->session->userdata('user_id')) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 
+0

您的應用程序中有多少個控制器? – OregonTrail

+0

只有2.用戶操作:登錄/註冊和這一個。你爲什麼問我? – ajtamwojtek

+0

我有許多開發人員正在處理的許多控制器的應用程序。如果你閱讀我的問題,你會發現這對我來說不是一個可行的解決方案。 – OregonTrail

0

我選擇來實現基於描述的認證技術解決方案在這篇博文中:

http://jondavidjohn.com/blog/2011/01/scalable-login-system-for-codeigniter-ion_auth

如果博客帖子不再存在:其要點是爲您希望在網站上擁有的每個訪問組擴展CI_Controller。然後你從這些擴展你的控制器。擴展CI_Controller的構造函數包含用於檢查用戶是否登錄和/或屬於特定組的代碼。另外,我寫了一個「預控制器」掛鉤,檢查以確保要執行的控制器是這些擴展控制器中的一個,而不是一個香草的CI_Controller。這是爲了將我的應用程序中的這些「已認證的控制器」列入白名單。

這可以確保沒有任何開發者加入該項目,通過使用普通的「CI_Controller」意外打開網站的一部分。