[VAZA] 0 Denunciar post Postado Junho 17, 2009 Pessoal, no meu site eu tenho a parte administrativa e a default. Acontece que quando eu me logo na parte administrativa, o mesmo valor de autenticação fica sendo utilizado tanto para a parte administrativa como para a default. Eu gostaria de separar isso. Como eu posso estar fazendo isso? Segue abaixo meu cód de autenticação pelo Zend_Auth. A unica diferença para o outro módulo, é que ao inves de puxar da entidade de clientes, puxa da entidade de funcionários. function loginAction() { $this->_helper->removeHelper('viewRenderer'); $this->_helper->layout->disableLayout(); $clientes = new Clientes(); if($this->getRequest()->isPost()) { $auth = Zend_Auth::getInstance(); $filter = new Zend_Filter_StripTags(); $login = $filter->filter($this->_request->getPost('login')); $senha = $filter->filter($this->_request->getPost('senha')); $authAdapter = new Zend_Auth_Adapter_DbTable($clientes->getAdapter(), 'clientes'); $authAdapter->setIdentityColumn('login') ->setCredentialColumn('senha'); $authAdapter->setIdentity($login) ->setCredential($senha); $result = $auth->authenticate($authAdapter); if($result->isValid()) { $clientes = new Clientes(); $regCliente = $clientes->fetchRow("login = '".$login."'"); $storage = new Zend_Auth_Storage_Session(); $data = $authAdapter->getResultRowObject(); $data->idcliente = $regCliente->idcliente; $storage->write($data); $this->_redirect('index'); } else { echo "<script language='javascript'>alert('Login/senha Invalido(s)');</script>"; echo "<script language='javascript'>self.location = 'index';</script>"; //$this->view->msg = 'Login/Senha invalido(s).'; } } } Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Junho 17, 2009 Bom vamos por partes antes de mais nada gostaria de dar umas dicas no seu codigo a primeira dica é simples você esta estanciando 2 vezes a classe Clientes e nao precisa apenas 1 ja resolve outra coisa eu percebi que você esta pegando a getAdapter atraves do metodo da classe cliente, nao precisa fazer assim e nem precisa carregar a classe cliente no caso do login. vou postar uma parte do meu sistema de login tem algumas linhas que você pode eliminar vendo meu codigo da pra enxugar um pouco o seu: obs: apaguei algumas coisas deixando só a parte que interessa <?php class LoginController extends Zend_Controller_Action { public function logarAction() { if (!($this->_request->isPost())) $this->_redirect('/'); try { $filter = new Zend_Filter(); $filter->addFilter( new Zend_Filter_StringTrim()) ->addFilter( new Zend_Filter_StripTags()) ->addFilter( new Zend_Filter_Alnum()); $nome = $filter->filter($this->_request->getPost('nome')); $senha = $filter->filter($this->_request->getPost('senha')); $config = Zend_Registry::get('config'); $db = Zend_Db::factory($config->database); $authAdapter = new Zend_Auth_Adapter_DbTable($db); $authAdapter->setTableName("Usuarios") ->setIdentityColumn("Login") ->setCredentialColumn("Senha") ->setCredentialTreatment('MD5(?)') ->setIdentity($nome) ->setCredential($senha); $result = Zend_Auth::getInstance()->authenticate($authAdapter); $db->closeConnection(); switch ($result->getCode()) { case Zend_Auth_Result::SUCCESS: $data = $authAdapter->getResultRowObject(null, "Senha"); if($data->Nivel_Acesso > 0){ Zend_Auth::getInstance()->getStorage()->write($data); $log_txt = "Login|$nome|".date("Y-m-d H:i:s"); $log_xml->log($log_txt, Zend_Log::INFO); $mensagem = "{success:true, dados: {code: '0', usuario:'".ucfirst(strtolower($nome))."'}}"; } else { Zend_Auth::getInstance()->clearIdentity(); $log_txt = "Aguardando liberação|$nome|".date("Y-m-d H:i:s"); $log_xml->log($log_txt, Zend_Log::INFO); $mensagem = "{success:false, dados: {code: '1'}}"; } break; case Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND: $log_xml->log('Erro Usuario nao cadastrado!!!', Zend_Log::WARN); $mensagem = "{success:false, dados: {code: '2'}}"; break; case Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID: $log_xml->log('Erro senha errada!!!', Zend_Log::WARN); $mensagem = "{success:false, dados: {code: '3'}}"; break; } } catch (Zend_Db_Adapter_Exception $e) { $mensagem = "{success:false, dados: {code: '4'}}"; $log_xml->log($e->getMessage(), Zend_Log::WARN); } catch (Zend_Exception $e) { $mensagem = "{success:false, dados: {code: '5'}}"; $log_xml->log($e->getMessage(), Zend_Log::WARN); } $this->getResponse()->clearBody(); $this->getResponse()->setHeader('Content-Type', 'text/x-json; charset=iso-8859-1'); $this->getResponse()->setBody($mensagem); } function logoutAction() { Zend_Registry::_unsetInstance(); Zend_Auth::getInstance()->clearIdentity(); $this->_redirect('/'); } } nao sei se percebeu nao estanciei a classe new Zend_Auth_Storage_Session eu usei assim: Zend_Auth::getInstance()->getStorage()->write($data); com esse comando $authAdapter->getResultRowObject(null, "Senha"); eu pego todos os dados da tabela ignorando o campo senha e no lugar de: $auth = Zend_Auth::getInstance(); $result = $auth->authenticate($authAdapter); eu usei: $result = Zend_Auth::getInstance()->authenticate($authAdapter); use e abuse dos recursos do Zend = ) bom agora sobre a sua duvida eu trabalho com um plugin SecurityPlugin.php e nele facilmente da pra fazer o que você quer, basicamente é você testar se o usuario esta logado, e depois testar o modulo se o usuario nao tiver acesso aquele modulo você manda ele pra tela de login desse modulo Compartilhar este post Link para o post Compartilhar em outros sites
GustavoBK 0 Denunciar post Postado Fevereiro 8, 2010 Olá Fabyo. Desculpe voltar ao tópico depois de tanto tempo. Estou fazendo um sistema e uso o ZF. Tem uns 5 dias que venho quebrando a cabeça com a classe Zend_Auth. Facilitou muito seguir o exemplo acima. Mas tive uma dúvida no ponto: $data->Nivel_Acesso > 0 ...que veio de: $data = $authAdapter->getResultRowObject(null, "Senha"); O que isso retornaria? Entendi que verifica as permissões do usuário, mas não entendi o que o getResultRowObject(null, "Senha") faz. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
srnetcave 1 Denunciar post Postado Fevereiro 15, 2010 GustavoBK, getResultRowObject(null, 'Senha');retornará um array com todas a colunas menos o a coluna Senha. Supondo que você tenha. tabela_clientes id email nome password getResultRowObject(null, 'password'); retornaria Array ( [id] => 1 [email] => email [nome] => nome ) Compartilhar este post Link para o post Compartilhar em outros sites
Renato Medina 0 Denunciar post Postado Fevereiro 22, 2010 Minha duvida é a seguinte. Como recupero os dados que o codigo abaixo guardou? Zend_Auth::getInstance()->getStorage()->write($data); Quero recupera-lo para usar posteriormente. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Fevereiro 22, 2010 $Auth = Zend_Auth::getInstance()->getIdentity(); Compartilhar este post Link para o post Compartilhar em outros sites
GustavoBK 0 Denunciar post Postado Março 3, 2010 Excelente! Valeu! Tentarei mexer com isso mais a frente pois estou implementando outra parte do sistema. Até maio venho tirar mais dúvidas! Abraço. Gustavo Compartilhar este post Link para o post Compartilhar em outros sites
Falci 0 Denunciar post Postado Março 8, 2010 Minha duvida é a seguinte. Como recupero os dados que o codigo abaixo guardou? Zend_Auth::getInstance()->getStorage()->write($data); Quero recupera-lo para usar posteriormente. //Assim: echo Zend_Auth::getInstance->getStorage()->read()->email; //ou assim: $dados = Zend_Auth::getInstance->getStorage()->read(); echo $dados->nome; echo $dados->email; // obs.: não tem como pegar a senha - por causa do getResultRowObject(null, 'Senha'); echo $dados->senha; // NULL Compartilhar este post Link para o post Compartilhar em outros sites
felipeduardo 0 Denunciar post Postado Junho 15, 2010 $Auth = Zend_Auth::getInstance()->getIdentity(); então mas caso meu usuario altere seus dados... eu teria que gravar ou alterar os dados de identidade dele correto?! como eu faço isso? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Junho 15, 2010 Geralmente os dados de login numa sessao, sao usados para manter o usuario logado, mas se voce for fazer alguma alteração que influencie no uso do sistema exemplo mudar o nivel de acesso, voce pode forçar o logout, para o cara ter que logar novamente Compartilhar este post Link para o post Compartilhar em outros sites
felipeduardo 0 Denunciar post Postado Junho 15, 2010 Geralmente os dados de login numa sessao, sao usados para manter o usuario logado, mas se voce for fazer alguma alteração que influencie no uso do sistema exemplo mudar o nivel de acesso, voce pode forçar o logout, para o cara ter que logar novamente então não existe forma de alterar os dados da sessão do zend_auth, sem que eu tenha que fazer o login novamente, no caso? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Junho 15, 2010 Da sim, basta você usar: Zend_Registry::_unsetInstance(); e criar a sessao novamente com os dados novos Zend_Auth::getInstance()->getStorage()->write($data); só lembrando que para manter o padrao tem que salvar os dados da classe e nao somente um simples array Compartilhar este post Link para o post Compartilhar em outros sites
felipeduardo 0 Denunciar post Postado Junho 15, 2010 Da sim, basta você usar: Zend_Registry::_unsetInstance(); e criar a sessao novamente com os dados novos Zend_Auth::getInstance()->getStorage()->write($data); só lembrando que para manter o padrao tem que salvar os dados da classe e nao somente um simples array vou te encomodar so mais uma vez antes do jogo hehe na minha autenticação tem opção para o usuário lembrar a o login Zend_Session::rememberMe(604800); ou Zend_Session::forgetMe(); caso o usuário tenha marcado opção para lembrar o login tem como eu saber isso? muito obrigado pela ajuda! Compartilhar este post Link para o post Compartilhar em outros sites
felipeduardo 0 Denunciar post Postado Junho 15, 2010 aaahh deixei de ser preguiçoso e descobri Zend_Session::isStarted(); Compartilhar este post Link para o post Compartilhar em outros sites