Ir para conteúdo

POWERED BY:

Arquivado

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

Alisson Nunes da Rocha

[Resolvido] Novo em Zend - Autênticação

Recommended Posts

Bom dia pessoal, começei a estudar Zend essa semana e estou com umas dificuldades, creio que todos que iniciaram com os estudos passaram por isso também.

 

Seguinte estou tentando implementar um sistema de login da minha aplicação antiga (migrando pro Zend), só que aparece o seguinte erro:

 

Exception information:

Message: A credential value was not provided prior to authentication with Zend_Auth_Adapter_DbTable.
Stack trace:

#0 C:\wamp\www\gg\library\Zend\Auth\Adapter\DbTable.php(367): Zend_Auth_Adapter_DbTable->_authenticateSetup()
#1 C:\wamp\www\gg\library\Zend\Auth.php(117): Zend_Auth_Adapter_DbTable->authenticate()
#2 C:\wamp\www\gg\application\controllers\UsuarioController.php(46): Zend_Auth->authenticate(Object(Zend_Auth_Adapter_DbTable))
#3 C:\wamp\www\gg\library\Zend\Controller\Action.php(513): UsuarioController->logarAction()
#4 C:\wamp\www\gg\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('logarAction')
#5 C:\wamp\www\gg\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#6 C:\wamp\www\gg\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#7 C:\wamp\www\gg\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#8 C:\wamp\www\gg\public\index.php(26): Zend_Application->run()
#9 {main}  

Request Parameters:

array (
 'controller' => 'usuario',
 'action' => 'logar',
 'module' => 'default',
 'usuario' => 'developer',
 'senha' => 'admin',
)  

 

 

meu codigo abaixo:

 

public function logarAction(){

	// Verifica se foi submetido via POST
	if( !$this->_request->isPost() )
		return false;

	// Obtém os dados passados via POST
	$data = $this->_request->getPost();


	// Cria uma instancia de Zend_Auth
	$objAuth = Zend_Auth::getInstance();


	/**
        * Instancia o Auth Db Table Adapter
        *
        * Quando se instancia este objeto, precisamos informar as configurações
        * do BD, nome da tabela onde os dados de login estão, o campo do nome
        * do usuário, e o campo da senha na tabela.
        */
       $authAdapter = new Zend_Auth_Adapter_DbTable(
               Zend_Registry::get( 'db' ),
               'usuario',
               'user',
               'senha',
               'md5(?)'
       );

       // Configura as credencias usuario e senha informadas pelo usuário
       $authAdapter->setIdentity( $data['usuario'] )->setCredential( $data['login']);

       // Tenta autenticar o usuário
       $result = $objAuth->authenticate($authAdapter);

       /**
        * Se o usuário for autenticado redireciona para a index e grava seu email,
        * caso contrário exibe uma mensagem de alerta na página
        */
       if ( $result->isValid() ) :

           /**
            * Pega os dados do usuário, omitindo a senha
            * http://framework.zend.com/manual/en/zend.auth.adapter.dbtable.html
            */
           $authData = $authAdapter->getResultRowObject( null, 'senha' );

           // Armazena os dados do usuário
           $objAuth->getStorage()->write( $authData );

           echo 'Login efetuado com sucesso!';
       else :
           echo 'Os dados informados (e-mail e/ou senha) não são válidos.';
       endif;

   }

 

 

alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos analisar a mensagem de erro:

 

Message: A credential value was not provided prior to authentication with Zend_Auth_Adapter_DbTable.

Isto significa que uma credencial não foi passada para o Zend_Auth. Então, vamos analisar outra questão:

 

Request Parameters:

array (
 'controller' => 'usuario',
 'action' => 'logar',
 'module' => 'default',
 'usuario' => 'developer',
 'senha' => 'admin',
)

// Obtém os dados passados via POST
$data = $this->_request->getPost();
// Atenção aos nomes...
$authAdapter->setIdentity( $data['usuario'] )->setCredential( $data['login']);  

Veja que a requisição enviada é para $_POST['senha']. Portanto, $data['login'] não existe. O que existe é $data['senha'].

 

Fazendo esta modificação, acredito que passará a funcionar.

 

Carlos Eduardo

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.