Список форумов Cake-PHP.ru Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
 
 Watched TopicsWatched Topics   FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Auth2 и Cookie в CakePHP 1.2rc1

 
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий
Предыдущая тема :: Следующая тема  
Автор Сообщение
Ratso

цитировать



Зарегистрирован: 19 Апр 2008 23:10:04
Сообщения: 23

СообщениеДобавлено: 23 Июн 2008 16:34:20    Заголовок сообщения: Auth2 и Cookie в CakePHP 1.2rc1 Ответить с цитатой

Помогите решить проблему, пожалуйста! В проекте используется
встроенная в кейк (1.2rc1) система авторизации Auth (если точнее, то
Auth2 из примеров вроде даже отсюда). Необходимо было добавить примочку
"Запомнить меня на этом ПК". Вродебы все просто. Но сайт "вспоминает"
пользователя только при попытке зайти на защищенную авторизацией
страницу. В шаблоне вызывается элемент для шапки, чтобы
поприветствовать пользователя с таким кодом:
Код:
<?php if($session->check('Auth.User')): ?>
Привет, <?php e($session->read('Auth.User.username')); ?>!
<?php else: ?>
Вы не вошли! <?php e($html->link('Войти', '/admin/login')); ?>?
<?php endif; ?>
Ну это сокращенные вариант... Входим на сайт, вводим данные, ставим галочку "запомнить", входим. Кукисы действительно сохраняются в браузере (все зашифровано как положено). Закрывает браузер. Запускаем и входим на заглавную сайта (там выставлено pages/home). И видим... Вы не вошли! Войти?
Когда жмем войти, появляется форма ввода данных и текст "Привет,
<имя пользователя>!". Мне же нужно, чтобы эта напись выводилась сразу при заходе на сайт.

Что мы имеем:
controllers/users_controller.php
Код:
function login(){
                if(!empty($this->Auth2->data)) {
                        if($this->Auth2->login($this->Auth2->data)) {
                if ($this->data['User']['remember_me'])  {
                $cookie = array();
                                $cookie['username'] = $this->data['User']['username'];
                                $cookie['password'] = $this->data['User']['password'];
                                $this->Cookie->write('Auth.User', $cookie, true, '+2 weeks');
                        }
                                unset($this->data['User']['remember_me']);
                                $this->Session->setFlash("Вход успешно выполнен!");
                                $this->redirect('/admin');
                        } else $this->Session->setFlash("Не знаю такого пользователя.
Возможно Вы где-то что-то неправильно ввели.");
                }
        }



В app_controller кроме того, что из примера, у меня следующее:
Код:
function beforeFilter() {
$this->Auth2->autoRedirect = false;
if ($this->getUserID() == -1) {
          $this->loginFromCookie();
    }

}

function loginFromCookie() {
   $cookie = $this->Cookie->read('Auth.User');
   if (!is_null($cookie)) {
     if ($this->Auth2->login($cookie)) {
       //  Clear auth message, just in case we use it.
       $this->Session->del('Message.auth');
           //echo "Загружено из кукисов";
           //$this->Session->setFlash('Загружено из кукисов');
       $this->redirect($this->Auth2->redirect());
     } else { // Delete invalid Cookie
                //echo "Delete invalid Cookie";
       $this->Cookie->del('Auth.User');
     }
   }
  }

  function getUserID() {
    $usr = $this->Auth2->user();
    if (!empty($usr)) {
      return $usr['User']['id'];
    } else {
      return -1;
    }
  }


Что можете посоветовать?

Если нужно, то вот ссылка на исходники (без графики, самого кейка, но чтоб разобраться в проблеме должно хватить):
http://ifolder.ru/7073347
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ratso

цитировать



Зарегистрирован: 19 Апр 2008 23:10:04
Сообщения: 23

СообщениеДобавлено: 24 Июн 2008 00:51:46    Заголовок сообщения: Ответить с цитатой

разобрался сам. Все действительно правильно, кроме одного. В app_controller нужно выставить теже $cookieName и $cookieKey, что и в users_controller. Иначе при проверке:
Код:
if (!is_null($cookie)) {

получим False. True получается когда система обращается к isAuthorise, которая в свою очередь идет к users->login, а у контроллера users, как мы уже поняли, $cookieName и $cookieKey правильные. Посему авторизация из кукисов проходила только при обращении к защищенный авторизацией функциям.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Имя
Сообщение

Смайлики
Very Happy Smile Sad Surprised
Shocked Confused Cool Laughing
Mad Razz Embarassed Crying or Very sad
Evil or Very Mad Twisted Evil Rolling Eyes Wink
Exclamation Question Idea Arrow
Дополнительные смайлики

 
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы можете начинать темы
Вы можете отвечать на сообщения
Вы можете редактировать свои сообщения
Вы можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB

Рейтинг@Mail.ru