Login Cookie

Implementei a verificação de login com cookie(remember me) porém algo não está correto.

O cookie é criado corretamente, porém quando fecho o navegador e depois o inicio e vou acessar uma página que precisa de login, o sistema está redirecionando para o login novamente, mas não deveria, pois existe o cookie.

Já defini corretamente as configurações de autologin como vi na documentação:




    'user' => array(

        'allowAutoLogin' => true,

        'class' => 'AdminWebUser',

        'loginUrl' => Yii::app()->createUrl('/admin/index/login'),

        'returnUrl' => array('admin/index/index'),

        'authTimeout' => 86400,

    ), ...



Já pesquisei o máximo que pude, mas não encontrei uma solução do porque a verificação de cookie não funciona.

Eu verifico se um usuário está logado assim:




    // ... em AdminWebUser que é um CWebUser


    public function requestLoginIfNecessaryToThisRoute($route)

    {

        if($this->isLogged() or Route::isPublic($route)) {

            return true; // continua o direcionamento para $route

        } else {

            $this->setReturnUrl('admin/' . $route);

            return $this->requestLogin(); // redireciona para a URL de login

        }

    }


    public function isLogged()

    {

        return $this->isGuest() === false;

    }


    public function isGuest()

    {

        return Yii::app()->user->isGuest;

    }



Em toda action (beforeControllerAction), chamo:




    // $route é a URL requisita(url de retorno), ex: admin/manager/create 

    Yii::app()

        ->getModule('admin')

        ->user->requestLoginIfNecessaryToThisRoute($route);



Essa verificação está redirecionando para a página de login mesmo quando o cookie de login existe. Minhas dúvidas:

  1. Yii::app()->user->isGuest verifica se o usuário está logado, mas porque então diz que não está quando existe o cookie do remember me?

  2. O login de sessão funciona perfeitamente. Mas como logar quando tem o cookie do remember me?

Na verdade o problema não é com a verificação do isGuest. Mas, sim, algo relacionado a módulos. Estou trabalhando com vários módulos, cada um deve ter sua configuração, etc. Estou investigando.

Maykon,

Uma vez eu tinha problema parecido, criava a sessão normal, salva o cookie, mais na hora que fechar o navegador e voltar novamente eu perdia a sessão.

Descobri que na hora que eu logava, e acessava a area interna, automaticamente eu ja perdia a sessão, ficava logado mais não salvava o cookie como eu imaginava.

Acabei descobrindo pela função init() que eu usava no Controller da pasta /protected/components/. Eu tinha uma validação do accessRules que limpava a sessão não sei por que motivo.

Hoje eu já consigo aplicar o ‘Mantenha-me conectado’ por bastante tempo, programando os dias ou semanas.