Cakephp $this-›Auth-›loggedIn() не всегда работает

Я использую компонент аутентификации cakephps для входа на свой сайт. Когда я правильно ввожу свое имя пользователя и пароль, он войдет в систему. Затем, когда я использую loggedIn() для проверки того, что я вошел в систему, он очень непоследовательно возвращает значение true. Это мой AppController, где я устанавливаю loggedIn() в переменную для последующего использования:

<?php

App::uses('Controller', 'Controller');
App::uses('File', 'Utility');
App::uses('AuthComponent', 'Component');

class AppController extends Controller {
    public $components = array(
        'Session',
        'Auth'=>array(
            'loginRedirect'=> array('controller'=>'users', 'action'=>'index'),
            'logoutRedirect'=> array('controller'=>'users', 'action'=>'index'),
            'authError' =>"You can't access that page",
            'authorize'=> array('Controller')
        )

    );
    //determines what logged in users have access to
    public function isAuthorized($user){
        return true;
    }
    //determines what non-logged in users have access to
    public function beforeFilter(){
        $this->Auth->allow('index','view');
        $this->set('logged_in', $this->Auth->loggedIn());
        $this->set('current_user', $this->Auth->user());
    }


}

И вот немного моего кода, где я использую «logged_in»

<?php if($logged_in): ?> //this only returns true some of the time
      Welcome <?php echo $current_user['username']; ?>. <?php echo  $this->Html->link('Logout', array('controller'=>'users', 'action'=>'login')); ?>

<?php else: ?>
   <?php echo  $this->Html->link('Login', array('controller'=>'users', 'action'=>'logout')); ?>
<?php endif; ?>

А вот мой логин():

public function login(){
    if($this->request->is('post')){
        if($this->Auth->login()){  //this returns true every time
            $this->redirect($this->Auth->redirect());

        }else{
            $this->Session->setFlash('Your username and/or password is incorrect');
        }
    }

}

Я попытался вызвать $this->Auth->loggedIn() вместо использования $logged_in, но получаю сообщение об ошибке, что не удается найти помощника аутентификации. Пожалуйста, дайте мне знать, если есть какая-либо дополнительная информация, необходимая для ответа на мой вопрос.


person caradrye    schedule 16.08.2012    source источник
comment
Просто посмотрите, есть ли там аутентифицированный с вашим var current_user   -  person Hugo Dozois    schedule 16.08.2012


Ответы (1)


Переместите эти строки в beforeRender()

    $this->set('logged_in', $this->Auth->loggedIn());
    $this->set('current_user', $this->Auth->user());

Кроме того, с вашим кодом все в порядке. Комментарий о том, что Auth->login() всегда будет возвращать true, происходит только тогда, когда вы передаете какой-либо аргумент методу login(), которого нет в показанном вами коде.

person Ceeram    schedule 17.08.2012