|
Cake-PHP.ru Форум программистов CakePHP (на сайт)
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 правильные. Посему авторизация из кукисов проходила только при обращении к защищенный авторизацией функциям. |
|
Вернуться к началу |
|
|
|
|
Вы можете начинать темы Вы можете отвечать на сообщения Вы можете редактировать свои сообщения Вы можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group Русская поддержка phpBB
|