Возникла проблема с ORM авторизацией в Kohana 3.3.4 Создал базовый контроллер для авторизации
Controller_Index_Auth который является наследником от класса Controller_Index а тот в свою очередь от базового контроллера
Controller_Base. В базовом контроллере в поле
$auth сохраняется объект фреймворка
Auth::instance().
код базового контроллера class Controller_Base extends Controller_Template {
public $user;
public $auth;
public $cache;
public $session;
public function before() {
parent::before();
I18n::lang('ru');
$settings = Kohana::$config->load('settings');
Cookie::$salt = 'asd12d2';
Session::$default = 'cookie';
$this->cache = Cache::instance('file');
$this->auth = Auth::instance();
$this->user = $this->auth->get_user();
$this->session = Session::instance();
}
}
В контролере для обработки запросов авторизации
Controller_Index_Auth я создал несколько методов. При авторизации из формы поступают данные и обрабатываются в методе
action_login() если все нормально идет пере направление на контроллер
Controller_Index_Account метод
action_index() который должен отображать страницу с личными данными пользователя.
Авторизация срабатывает и перенаправляет на страницу с данными пользователя, но возникает проблема, уже в контроллере
Controller_Index_Account я не могу получить никакой информации по авторизованному пользователю, метод фреймворка
logged_in () почему-то возвращает false? Хотя когда я нахожусь в контроллере
Controller_Index_Auth метод
$this->auth->logged_in () возвращает true и я могу получить информацию по авторизованному пользователю используя метод фреймворка
$this->auth->get_user(), как то странно, по идеи все данные после авторизации должны сохранятся в поле $auth и я могу их получить в любом контроллере приложения, но они не сохраняются!
код контроллера Controller_Index_Authclass Controller_Index_Auth extends Controller_Index {
public function action_index() {
$this->action_login();
}
public function action_login() {
if(Auth::instance()->logged_in()) {
$this->redirect('account');
}
if (isset($_POST['submit'])){
$data = Arr::extract($_POST, array('username', 'password', 'remember'));
$status = $this->auth->login($data['username'], $data['password'], (bool) $data['remember']);
//$role = $this->auth->logged_in();
// var_dump($role);
// $user = $this->auth->get_user();
// var_dump($user);
if ($status){
if($this->auth->logged_in('admin')) {
$this->redirect('admin');
}
$this->redirect('account');
}
else {
$errors = array(Kohana::message('auth/user', 'no_user'));
}
}
// ...
}
//...
}
В контроллере
Controller_Index_Account в методе
before() идет проверка на авторизацию, но оно не срабатывает
$this->auth->logged_in() возвращает false хотя должен возвращать true.
код контроллера Controller_Index_Accountclass Controller_Index_Account extends Controller_Index {
public function before(){
parent::before();
if (!$this->auth->logged_in()) { // здесь идет проверка
$this->redirect('login');
}
$account_menu = Widget::load('menuaccount');
// Выводим в шаблон
$this->template->block_right = null;
$this->template->block_left = array($account_menu);
}
// ...
}
В файле настроек если поменять драйвер orm на file то авторизация работает нормально, в чем может быть причина?
код файла application/config/auth.phpreturn array(
//'driver' => 'file',
'driver' => 'orm',
'hash_method' => 'sha256',
'hash_key' => 'asjdhas6f2e12kas',
'lifetime' => 1209600,
'session_key' => 'auth_user',
// Username/password combinations for the Auth File driver
'users' => array(
// 'admin' => 'b3154acf3a344170077d11bdb5fff31532f679a1919e716a02',
'user'=>'857c303e1102231b7e4a27aaa0a2dd6495aa2510c0290781614581f483efb11b'
),
);