@alexzpua

Return parent после редиректа в Kohana. Зачем?

Доброго времени суток. Не совсем понимаю, кому мы, что возвращаем и зачем?
Вот класс, который не пускает не залогиненых пользователей на странички:
<?php defined('SYSPATH') or die('No direct script access.');

class SecurityController extends Controller_Template {

public function before(){
$session = Session::instance();
$session->set('auth_redirect', $_SERVER['REQUEST_URI']);

$auth = Auth::instance();
if (!$auth->logged_in())
{
Controller::redirect('auth');
}
return parent::before();
	}
		}

Я понимаю, что если не залогинен, нас редиректит на страницу авторизации, но зачем мы что-то еще возаращем я не понимаю...

На всяких случай класс авторизации:
<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Auth extends Controller_Template {

public $template = 'base';

	public function action_index()
	{
$auth = Auth::instance();
$data = array();
if ($auth->logged_in())
{
Controller::redirect('');
}
else
{
if (isset($_POST['btnsubmit']))
{ 
			$login = Arr::get($_POST, 'login', '');
			$password = Arr::get($_POST, 'password', '');
				if ($auth->login($login, $password))
				{
				$session = session::instance();
				$auth_redirect = $session->get('auth_redirect','');
				$session->delete('auth_redirect');
				Controller::redirect($auth_redirect);
				}
				else
				{
				$data['error'] = true;
				}
		}	
}

		$this->template->content = view::factory('authview',$data);
	}

	public function action_hpass() {
	$auth = Auth::instance();
	$this->template->content = $auth->hash_password('admin');
	}
	
public function action_logout() {
$auth = Auth::instance();
$auth->logout();
Controller::redirect('auth');
}
}
  • Вопрос задан
  • 2527 просмотров
Пригласить эксперта
Ответы на вопрос 3
ilyaplot
@ilyaplot
PHP программист
Return может использоваться для прекращения выполнения скрипта. Можно научить браузер не слушаться редиректов. Были случаи, когда после редиректа шел код авторизации. Такие дыры встречаются до сих пор.
Ответ написан
Комментировать
@alexzpua Автор вопроса
Понял в чем фишка... Т.к мой котроллер "Main", который я даже не указал наследует "SecurityController", а метод "before()" выполняется первым, то в случае когда пользователь уже залогинен, дальше ничего и произойти не может, если мы ничего не вернем. Я правильно понимаю?
Класс "Main"
<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Main extends SecurityController {

public $template = 'base';

public function action_index()
{
$this->template->content = view::factory('home');
}

}
Ответ написан
Комментировать
return parent::before() вызывается после условия if. Если условие сработает - будет редирект и return проигнорируется. Если же не сработает - вызовется именно return. В чем тут трудности-то с понимаем?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы