Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 20 апр 2024, 09:21

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
СообщениеДобавлено: 18 сен 2013, 16:16 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
Здравствуйте. Прошу помочь в некотором вопросе.
Как я делаю авторизацию. По логике вещей, что бы не проверять, а залогинен ли пользователь или нет в каждом контроллере, я сделал базовый контроллер Basic.php. Вот его код:
Код:
abstract class Basic extends Controller_Template {
   
    public $template = 'basicView';

    public function before()
    {
        parent::before();
        $auth = Auth::instance();
   if(isset($_POST['enter'])):
            $login = Arr::get($_POST, 'login', '');
            $password = Arr::get($_POST, 'password', '');
            $auth->login($login, $password)
        endif;
   if($auth->logged_in() == 0)
   {
            $this->template->navPanel = View::factory('navigation/guestNavPanel');
            $this->template->userPanel = View::factory('authPanel');
   }
        else
        {
            $this->template->userPanel = View::factory('userPanel');
        }
       
    }

} // End Welcome

Кусок кода:
Код:
if($auth->logged_in() == 0)
   {
            $this->template->navPanel = View::factory('navigation/guestNavPanel');
            $this->template->userPanel = View::factory('authPanel');
   }
        else
        {
            $this->template->userPanel = View::factory('userPanel');
        }

Проверяет, залогинен ли пользователь и выводит соответствующие панели. Если пользователь залогинен, то вместо формы для ввода логина и пароля ему выводиться мини-версия его личного кабинета, а так же навигационная панель с большими возможностями чем у незалогиненого пользователя. Все это я делаю сразу, в базовом контроллере, что бы другие контроллеры отвечали только за вывод динамически меняющейся области шаблона.

Вот форма авторизации authPanel.php:
Код:
<h3>Вход в систему</h3>
<form method="POST" action="">
<table>
    <tr>
        <td>Логин:</td>
        <td><input type="text" name="login"></td>
    </tr>
    <tr>
        <td>Логин:</td>
        <td><input type="password" name="password"></td>
    </tr>
    <tr>
        <td colspan="2"><input type="submit" value="Вход" name="enter" /></td>
    </tr>
</table>
</form>

Но почему-то не хочет логиниться и все тут. Я делал авторизацию по урокам Морковина, но у него использовался отдельный контроллер и вид для формы авторизации. Я же хочу, что бы форма входа выводилась и могла отправляться со всех страниц сайта, что бы пользователь без всяких лишних редиректов после ввода логина и пароля оставался на той же странице на которой он был до входа, но вместо формы вход ему отображалась бы что-то вроде "Вы работаете как ****, ссылка ни личный кабинет, кнопка выход, кол-во личных сообщений" и т.д.

После нажатия кнопки "Вход" тупо ничего не происходит. Страница перезагружается, но условие
Код:
if($auth->logged_in() == 0)

не выполняется и пользователю вновь выводиться форма входа.
Хочу отметить, что и в БД никаких изменений не происходит, как было у тестового пользователя logins = 0, так и сталось.
Что я делаю не так?

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 сен 2013, 16:43 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
посмотри api по login и logged_in, ну и проверь приходят ли данные от формы в before и в каком виде. установи https://github.com/biakaveron/debug-toolbar чтобы это было проще делать

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19 сен 2013, 10:34 
Не в сети
Бывалый

Зарегистрирован: 16 апр 2012, 19:44
Сообщения: 113
Код:
if(!$auth->logged_in())
{
}


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19 сен 2013, 17:22 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
Разобрался. Забыл дать пользователю роль login.
Теперь вопрос в следующем.
Почему я не могу в самом начале контроллера Basic объявить так:
Код:
public $auth = Auth::instace();


Что бы потом в других контроллерах которые его наследуют просто делать так:
Код:
$this->auth->logged_in('admin'); //ну или что-то в этом роде.


Что бы в каждом экшене не создавать новый экземпляр класса Auth?

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19 сен 2013, 17:51 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
потому, что ты не знаешь как переменные классов в php задавать

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19 сен 2013, 18:12 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
Код:
abstract class Basic extends Controller_Template {
   
    public $template = 'basicView';
    public $auth = Auth::instance();//я пишу так, разве это неправильно?

    public function before()
    {
        parent::before();
        $auth = Auth::instance();
   if(isset($_POST['enter'])):
            $login = Arr::get($_POST, 'login', '');
            $password = Arr::get($_POST, 'password', '');
            $auth->login($login, $password)
        endif;
   if($auth->logged_in() == 0)
   {
            $this->template->navPanel = View::factory('navigation/guestNavPanel');
            $this->template->userPanel = View::factory('authPanel');
   }
        else
        {
            $this->template->userPanel = View::factory('userPanel');
        }
       
    }

} // End Welcome

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19 сен 2013, 18:35 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
неправильно конечно, иначе бы работало. в before задавай.

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19 сен 2013, 22:48 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
Код:
abstract class Basic extends Controller_Template {
   
    public $template = 'basicView';

    public function before()
    {
        parent::before();
        $auth = Auth::instance();
   if(isset($_POST['enter'])):
            $login = Arr::get($_POST, 'login', '');
            $password = Arr::get($_POST, 'password', '');
            $auth->login($login, $password)
        endif;
   if($auth->logged_in() == 0)
   {
            $this->template->navPanel = View::factory('navigation/guestNavPanel');
            $this->template->userPanel = View::factory('authPanel');
   }
        else
        {
            $this->template->userPanel = View::factory('userPanel');
        }
       
    }

} // End Welcome

Если оставить так, а потом где-то в дочернем классе попробовать вызвать:
Код:
$this->auth

эта переменная недоступна, хотя в дочернем классе имеется метод
Код:
public function before(){
    parent::before();
}

Или вы имеете ввиду объявить $auth = Auth::instance(); в бефоре дочернего класса?

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19 сен 2013, 23:20 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
Даже попробовал так:
Код:
<?php defined('SYSPATH') or die('No direct script access.');

 abstract class Basic extends Controller_Template {
   
    public $template = 'basicView';
    public $auth;

    public function before()
    {
        parent::before();
        $this->$auth = Auth::instance();

...


Но у меня кохана не то что ругается, у меня таким образом тупо ошибка сервера. Подскажи, как надо?

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19 сен 2013, 23:57 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
последний вариант верный, ошибка в чем-то еще

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group