Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde, tenho o script abaixo para efetuar login, utilizo tabela "tb_cadastros", o script não me retorna erro algum apenas não consigo me logar, segue o script ...
public function acaoAction(){
$post = Zend_Registry :: get('post');
$encriptar = new Encriptacao();
if($this->getRequest()->isPost()):
// Tratando campos do formulário contra SQL Injection
$email = mysql_escape_string($post->email);
$senha = $encriptar->encriptar($post->senha);
$dbAdapter = Zend_Db_Table::getDefaultAdapter();
//Inicia o adaptador Zend_Auth para banco de dados
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
$authAdapter->setTableName('tb_cadastros')
->setIdentityColumn('email')
->setCredentialColumn('senha');
//Define os dados para processar o login
$authAdapter->setIdentity($email)
->setCredential($senha);
//Efetua o login
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
//Verifica se o login foi efetuado com sucesso
if ($result->isValid()):
//Armazena os dados do usuário em sessão, apenas desconsiderando
//a senha do usuário
$info = $authAdapter->getResultRowObject(null, 'senha');
$storage = $auth->getStorage();
$storage->write($info);
//Redireciona para o Controller protegido
$this->_redirect('/');
else:
//Dados inválidos
$msg = "Login/Senha não conferem";
$this->_helper->flashMessenger->addMessage(array('success' => $msg));
$this->_redirect('cadastro/login');
endif;
endif;
}
}
OBS: Utilizo este mesmo script para fazer login em um outro modulo "admin" e funciona perfeitamente, no módulo "site" apenas alterei a tabela e os campos de acesso e não consigo mais me logar.
Ele envia o form, fiz os debugs e não está caindo aki if ($result->isValid()): tá sempre exibindo a mensagem Login/Senha não conferem
Vc nao precisa fazer isso:
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
o proprio metodo ja tem o authenticate ficando assim:
$result = $authAdapter->authenticate();
outra dica nao precisa usar o mysql_escape_string use Zend_Filter()
outra coisa porque vc esta recuperando os campos com isso:
Zend_Registry :: get('post') ?
outra coisa a classe Encriptacao tem alguma coisa em especial alem do basico MD5?
Se está sempre exibindo esta mensagem é porque não autenticou mesmo. Veja se os dados em $post estão corretos, porque achei bem estranho esta forma que você está usando para resgatar. A forma mais fácil é utilizar $this->getRequest()->getPost(), sendo que será retornado como um array e não como um objeto.
Carlos Eduardo
>
você nao precisa fazer isso:
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
o proprio metodo ja tem o authenticate ficando assim:
$result = $authAdapter->authenticate();
outra dica nao precisa usar o mysql_escape_string use Zend_Filter()
outra coisa porque você esta recuperando os campos com isso:
Zend_Registry :: get('post') ?
outra coisa a classe Encriptacao tem alguma coisa em especial alem do basico MD5?
Eu não conheço muito bem o Zend uso dessa forma, pois uma vezes peguei um projeto q tava assim e estou dando continuidade, neste projeto q estou fazendo estou utilizando da mesma forma mas valew pela dica pois agora vou começar a melhorar as coisas aki ahhauh ...
>
Se está sempre exibindo esta mensagem é porque não autenticou mesmo. Veja se os dados em $post estão corretos, porque achei bem estranho esta forma que você está usando para resgatar. A forma mais fácil é utilizar $this->getRequest()->getPost(), sendo que será retornado como um array e não como um objeto.
Carlos Eduardo
Está retornando todos os dados corretamente, uncluvive o campo senha com criptografia igual está no banco, os dados q recupero do form estão iguais aos dados do banco. O estra nho de tudo isso é q no módulo "admin" o mesmo script funciona ...
Consegui resolver, da seguinte forma
public function init(){
Zend_Loader :: loadClass('Zend_Auth_Adapter_DbTable');
}
Eu já faço o load dessa classe Zend_Auth_Adapter_DbTable no meu index.php, e tava funcionando corretamente no módulo "admin", a minha dúvida é pq tive q fazer isso novamente ?
Vc nem precisa fazer Load nenhum.
coloque isso no seu index.php:
Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);
Mas o pq se eu não fizer load dá erro not found Zend_Auth_Adapter_DbTable ?
Certo, mas você envia o formulário e ele não faz nada, como se o formulário não tivesse sido enviado ou dá mensagem de erro, dizendo que não foi autenticado?
Carlos Eduardo