使用CodeIgniter进行用户身份验证

时间:2010-05-20 04:48:46

标签: authentication codeigniter redirect loops

我在为我的应用程序创建身份验证部分时遇到问题。

以下是我的控制器的简化版本。

这个想法是MY_controller检查是否存在具有用户数据的会话。 如果没有,则重定向到您必须登录的索引页面。

MY_controller.php

class MY_Controller extends Controller {

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

$this->load->helper('url');
$this->load->library('session');

if($this->session->userdata('user') == FALSE) {
redirect('index');

} else {
redirect('search');
}

}

} 

order.php - 主控制器

class Orders extends MY_Controller {

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

$this->load->helper('url');
$this->load->library('session');
}

function index()
{
// Here would be the code that validates information input by user.
// If validation is successful, it creates user session.


$this->load->view('header.html', $data); // load header
$this->load->view('index_view', $data); // load body
$this->load->view('footer.html', $data); // load footer
}

function search()
{
//different page
} 

正在发生的事情是浏览器告诉我“页面没有正确重定向。 Firefox检测到服务器正在以永远不会完成的方式重定向该地址的请求。“

似乎redirect()正在循环播放。我查看了一些其他用户身份验证的例子,他们使用类似的技术构建。

2 个答案:

答案 0 :(得分:2)

当用户已登录时,您似乎想要将其重定向到/search/。重定向发生,并再次调用构造函数,它识别用户已经登录,因此它将它们重定向到/search/ ...你明白了。

我首先将您的登录逻辑分离到它自己的控制器中,该控制器不会从MY_Controller延伸。

答案 1 :(得分:0)

另请注意,未登录时,您的控制器会重定向到“索引”。如果Index控制器也基于My_Controller,那么它将重定向回自身(直到用户登录,然后Dolph Mathews的答案成真)。

您需要提供一个没有检查/重定向的“安全区域”,为用户提供登录表单(并注意您的登录控制器/方法也必须具有开放访问权限!)

我倾向于将一个网关方法弹出到My_Controller中,My_Controller只根据需要由私有控制器/方法调用(在完全私有控制器的构造函数中)。我确信必须有更好的方法,或许像你的My_Controller中的网关功能(正如你的那样)但是过滤了URI路径(例如允许索引;索引/登录;索引/注销等)