2014-02-23 129 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”意外打开网站的一部分。