Ir para conteúdo

Arquivado

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

Edultra

[Resolvido] Problema com Zend Auth

Recommended Posts

Boa tarde,

 

Tenho o seguinte problema, utilizo o zend auth para autenticar em um servidor ldap, o grande problema é o seguinte, após ele logar ele redireciona para uma controller principal, onde eu testo se esta autenticado, ok funciona corretamente, o problema é que nesta controller eu tenho um menu que redireciona para outras controllers do sistema, que utilizam o mesmo script para testar se esta autenticado, porém nestas da o seguinte erro:

 

 

Fatal error: Uncaught exception 'Zend_Controller_Response_Exception' with message 'Cannot send headers; headers already sent in /var/www/NVS/application/controllers/RhController.php, line 93'

 

se utilizo o codigo de logoff na principal funciona, se comento o codigo de teste nesta ele funciona.

 

Segue abaixo o código que utilizo para fazer o login:

 

public function loginAction() {

       $auth = Zend_Auth::getInstance();

       //Carrega as configurações
       $config = new Zend_Config_Ini('../application/configs/application.ini', 'production');
       $options = $config->ldap->toArray();

       $login = $this->_getParam('TxtUsuario');
       $senha = $this->_getParam('TxtSenha');

       //Instancia o Adaptador com a conexão LDAP
       $adapter = new Zend_Auth_Adapter_Ldap($options, $login, $senha);

       //Autentica
       $result = $auth->authenticate($adapter);

       //Verifica se a autenticação foi válida
       if ($result->isValid()) {
           $result->getIdentity() === $auth->getIdentity();
           $result->getIdentity() == $username;
           $this->_redirect('principal');

       } else {
           //Para imprimir as mensagens de erro se necessário
           foreach ($result->getMessages() as $message) {
               echo "$message";
           }

           $this->_redirect('login/erro/usuario/' . $login);
       }
   }

 

Segue o código que utilizo para verificar se a sessão é valida na controller (dentro de init):

 

    
public function init() {
       /* Initialize action controller here */
       $this->view->baseUrl = $this->_request->getBaseUrl();
       $armazenamento = new Class_Bd();

       $auth = Zend_Auth::getInstance();
       if ($auth->hasIdentity()) {
           $usuario = $auth->getIdentity();
           $this->view->usuario = $usuario;
           $menu = new Class_Menu($usuario, 1, $armazenamento);
           $this->view->menu = $menu->MontaMenus();
       } else {
           $this->_redirect('login/erro/usuario/' . $login);
       }
   }

 

Como chamo em outras controllers uma instancia do zend auth? esta faltando algo na action de login?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver o problema não estava iniciando e armazenando a sessão, adicionei o seguinte código dentro da classe Bootstrap:

   protected function _initSession() {
       $options = $this->getOptions();
       $sessionOptions = array(
           'save_path' => $options['resources']['session']['save_path']
       );
       Zend_Session::setOptions($sessionOptions);
       Zend_Session::start();
   }

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.