Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Duardaum

[Resolvido] Zend_Auth perde valor no redirecionamento de módulo

Recommended Posts

Olá pessoal,

 

acho que vocês já estão enjoados da minha cara de tanto perguntar para vocês rsrsr :P

 

Desta vêz da dando o seguinte erro:

* Quando eu efetuo o login do usuario e redireciono para o módulo de funcionários, ele meio que

perde os dados do Zend_Auth::getInstance()->getIdentity(),

 

alguem sabe por que isso acontece ou disconfia??

 

Desde já grato!! :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você está fazendo a autenticação e a gravação dos dados no Auth? E para recuperar? Poste os códigos. Para você dizer isto, imagino que você deva estar com problemas para verificar se o usuário está logado ou não, certo? Então, poste também este trecho do código.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que eu faço o login em um módulo para poder redirecionar para outro.

Quando ele faz o login e redireciona para o módulo vai de boa.

 

O problema é que, eu faço uma busca em tempo real usando um input via ajax,

e eu preciso de um código que fica no Zend_Auth::getStorage()->ready() ou Zend_Auth::getInstance()->getIdentity() como preferirem.

para fazer essa busca. Quando ele vai fazer essa busca os dados do Zend_Auth::xxx somem..

 

Abaixo os códigos utilizados para a validação.

 

Login_IndexController.php

if($this->getRequest()->isPost()){
            $DADOS = $this->getRequest()->getPost();
            if($objFormLogin->isValid($DADOS)){
                //Tentativa de Autenticação
                $objFuncionario = new Funcionario();
                $USERDADOS = $objFuncionario->Autenticar($_POST['txtLogin'], $_POST['txtSenha']);
                if(is_array($USERDADOS)){
                    Zend_Auth::getInstance()->getStorage()->write($USERDADOS);
                    $this->_redirect('/funcionarios');
                }else{
                    $this->view->erromsg = $USERDADOS;
                }
            }else{
                $objFormLogin->populate($DADOS);
            }
        }

Utilizo um plugin para poder verificar se o usuário está logado e é para o módulo que ele está querendo:

 

class Lord_Plugin_Auth extends Zend_Controller_Plugin_Abstract {

    public function routeShutdown(Zend_Controller_Request_Abstract $objRequest) {
        $objRequisicao = (object) array(
                                         'modulo' => $objRequest->getModuleName(),
                                         'controller' => $objRequest->getControllerName(),
                                         'action' => $objRequest->getActionName()
                                       );
        $objAuth = Zend_Auth::getInstance();
        switch(trim($objRequisicao->modulo)){
            case 'funcionarios':{
                if($objAuth->hasIdentity()){
                    $USER_DADOS = $objAuth->getIdentity();
                    if(!isset($USER_DADOS[0]['codfuncionario'])){
                        //Desloga o usuário
                        $objAuth->clearIdentity();
                        //Manda para a pagina de login
                        $this->getResponse()->setRedirect('/login/index/funcionario');
                    }
                }else{
                    //Mandando o usuário para página de login de funcionarios
                   $this->getResponse()->setRedirect('/login/index/funcionario');
                }
            break;
            }
            case 'login':{
                
            break;
            }
            default :{
                if($objAuth->hasIdentity()):
                    //Desloga o usuário
                    $objAuth->clearIdentity();
                endif;
                $objRequest->setModuleName('padrao');
            break;
            }
        }
    }

}

Na function init(){} eu verifico se a requisição é ajax ou não para poder desabilitar o layout e trazer apenas os dados

e aproveito pegar o código. OBS.: Esse código que é o do usuário tem que ficar no Storage() pois tem que espirar.

 

public function init(){

        if($this->getRequest()->isXmlHttpRequest()){
            $this->_helper->layout->disableLayout();
        }
        
        if(Zend_Auth::getInstance()->hasIdentity()){
            $objUser = Zend_Auth::getInstance()->getStorage()->read();
            print_r($objUser); exit;
        }else{
            echo 'sua sessão expirou..'; exit;
        }
    }


Função de autenticação do Funcionario:

public function Autenticar($login, $senha){
        $objDb = Zend_Registry::getInstance()->get('database');
        $select = $objDb->select()
                        ->from(array('vi_login_funcionario'),
                               array('codfuncionario', 'nome', 'sexo', 'departamento', 'bloqueado')
                              )
                        ->where("login = '".strtoupper(addslashes($login))."' AND CRYPT('".addslashes($senha)."', senha) = senha")
                        ->limit('1')
                        ->query();

        $DADOS = $select->fetchAll();

        if(empty($DADOS)){
            $str = "Login ou Senha incorretos.";
            unset($DADOS);
            return $str;
        }else if($DADOS[0]['bloqueado'] == 'S'){
            $str = "Você foi bloqueado. Contate o administrador do sistema para efetuar o desbloqueio.";
            unset($DADOS);
            return $str;
        }else{
            return $DADOS;
        }
    }

E não adianta, os dados somem sem eu ter ao menos que limpar..

 

alguma solução..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.