2010-05-20 4 views
0

У меня возникла проблема с созданием части аутентификации для моего приложения.Идентификация пользователя с помощью CodeIgniter

Ниже приведена упрощенная версия моих контроллеров.

Идея состоит в том, что 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 обнаружил, что сервер перенаправляет запрос для этого адреса таким образом, который никогда не будет завершен ».

Кажется, что перенаправление() зацикливается. Я посмотрел на несколько других примеров пользовательского auth, и они были построены с использованием аналогичной техники.

ответ

2

Когда пользователь уже вошёл в систему, возможно, вы хотите перенаправить их на /search/. Переадресация происходит, и конструктор вызывается снова, в котором признается, что пользователь уже зарегистрирован, поэтому перенаправляет их на /search/ ... вы получаете эту идею.

Я бы начал с разделения логики входа в свой собственный контроллер, который не распространяется от MY_Controller.

+0

Да, я постараюсь отделить его. –

0

Также обратите внимание, что, когда вы не вошли в свой контроллер, перенаправление на «индекс». Если указательный контроллер также основан на My_Controller, он будет перенаправлять обратно на себя (пока пользователь не войдет в систему, а затем ответ Dolph Mathews не появится).

Вы должны обеспечить «безопасную зону» без проверки/перенаправления, которая предоставляет пользователь регистрационной формы (и обратите внимание, что ваш контроллер Логина/метод должен иметь открытый доступ тоже!)

Я склонен к попам метод шлюза в My_Controller, который вызывается только частными контроллерами/методами по мере необходимости (в конструкторе полностью частных контроллеров). Я уверен, что должен быть лучший способ, хотя, возможно, как функция шлюза в My_Controller (как и ваша), но которая фильтрует путь URI (например, позволяет индексировать, индексировать/регистрировать, индексировать/выходить и т. Д.)

+0

Ну, я понял, как это сделать. Я создал отдельный контроллер входа, который выполняет только аутентификацию пользователя. В конструкции всех других контроллеров я помещаю код simpel, чтобы проверить, установлен ли сеанс с именем пользователя. Если нет -> перенаправление на контроллер входа. Работает как шарм. –

Смежные вопросы