Аутентификация пользователя с использованием CodeIgniter - PullRequest
0 голосов
/ 20 мая 2010

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

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

Идея состоит в том, что 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 ]

2 голосов
/ 20 мая 2010

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

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

0 голосов
/ 27 мая 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...