Utilizando Zend_Auth -
Veja abaixo como fazer um sistema SIMPLES de autenticação utilizando o Zend Framework.
AuthController.php
view->noLayout = true;
$auth = Zend_Auth::getInstance ();
$this->view->auth = $auth->hasIdentity ();
}
function loginAction() {
$this->view->noLayout = true;
$this->view->message = '';
if ($this->_request->isPost ()) {
// collect the data from the user
Zend_Loader::loadClass ( 'Zend_Filter_StripTags' );
$filter = new Zend_Filter_StripTags ( );
$usuario = $filter->filter ( $this->_request->getPost ( 'usuario' ) );
$senha = $filter->filter ( $this->_request->getPost ( 'senha' ) );
if (empty ( $usuario )) {
$this->view->message = 'Favor entrar com um login.';
} else {
// setup Zend_Auth adapter for a database table
Zend_Loader::loadClass ( 'Zend_Auth_Adapter_DbTable' );
$db = Zend_Registry::get ( 'database' );
$authAdapter = new Zend_Auth_Adapter_DbTable ( $db );
$authAdapter->setTableName ( 'users' );
$authAdapter->setIdentityColumn ( 'login' );
$authAdapter->setCredentialColumn ( 'passwd' );
// Set the input credential values to authenticate against
$authAdapter->setIdentity ( $usuario );
$authAdapter->setCredential ( $senha );
// do the authentication
$auth = Zend_Auth::getInstance ();
$result = $auth->authenticate ( $authAdapter );
if ($result->isValid ()) {
// success : store database row to auth's storage system
// (not the password though!)
$data = $authAdapter->getResultRowObject ( null, 'passwd' );
$auth->getStorage ()->write ( $data );
$this->_redirect ( '/' );
} else {
// failure: clear database row from session
$this->view->message = 'Login falhou.';
}
}
}
}
function logoutAction() {
Zend_Auth::getInstance ()->clearIdentity ();
$this->_redirect ( '/' );
}
}
index.phtml
if(!$this->auth): ?>else: ?> Logado. Logout
O grande ponto que temos que nos atentar são essas linhas:
Zend_Loader::loadClass ( 'Zend_Auth_Adapter_DbTable' ); $db = Zend_Registry::get ( 'database' ); $authAdapter = new Zend_Auth_Adapter_DbTable ( $db ); $authAdapter->setTableName ( 'users' ); $authAdapter->setIdentityColumn ( 'login' ); $authAdapter->setCredentialColumn ( 'passwd' ); // Set the input credential values to authenticate against $authAdapter->setIdentity ( $usuario ); $authAdapter->setCredential ( $senha );
Esse trecho configura o Zend_Auth perguntando qual é a tabela de usuários, coluna de login e a coluna da senha. Tendo esses dados ele faz a autenticação.
Qualquer dúvida, deixe um comment!
Ola,
Estou iniciando agora a programacao com o Zend e ainda tenho bastante duvidas sobre o seu funcionamento.
Jah desenvolvi alguns aplicativos seguindo tutoriais na internet, e agora estou querendo desenvolver uma tela d login.
Vendo os exemplos na internet, o seu me parece o melhor pois eh bem simples. Copiei o codigo para um projeto base que tenho, porem nao csg fazer funcionar… O seguinte erro aparece (Uncaught exception ‘Zend_Controller_Dispatcher_Exception’ with message ‘Invalid controller specified). Terias como passar a estrutura do projeto, ou me ajudar a encontrar o erro?
Muito Obrigado
Bruno
Comentário by Bruno — 01/10/2008 @ 12:46
Olá Bruno, muito obrigado pelo elogio!
Sobre o seu erro, aparentemente ele está sentindo falta de um controlador, ou seja, você está acessando uma URL que não existe um controlador. Exemplo:
meusite.com.br/teste
na pasta de controllers, você precisa ter o arquivo testeController.php
Sei que sou suspeito para falar isso, mas de uma olhada em nossos treinamentos de ZF (www.schoolofnet.com/treinamentos).
Acho que muito lhe ajudará.
De qualquer forma, poste sua dúvida aqui caso eu não tenha entendido muito bem sua questão.
Grande abraço
Comentário by Wesley — 01/10/2008 @ 13:11
em meu projeto esta dando este erro:
* Fatal error: Call to a member function toArray() on a non-object in C:\xampp\htdocs\representante\public\index.php on line 20
o meu arquivo de bootstrap esta assim:
// setup database
20: $db = Zend_Db::factory ( $config->db->adapter, $config->db->config->toArray () );
21: Zend_Db_Table::setDefaultAdapter ( $db );
22: Zend_Registry::set ( ‘db’, $db );
Comentário by Tomio — 26/03/2009 @ 10:14
Olá Wesley,
Estou desenvolvendo um sistema de autenteicação com zend_auth. Achei muito bom o seu post, porém ainda tenho uma dúvida.
Preciso passar um campo a mais para a autenticação. Por ex… Login, Senha e App_id.
Como isso é possivel?
obrigado.
Comentário by William — 27/03/2009 @ 16:58
Olá,
Vamos supor que eu queira guardar alguma outra informação do usuário logado, como o cargo de ocupação dele.
Enquanto ele estiver logado, eu consigo enchergar o cargo do usuário.
Eu tenho que usar uma session separada? como eu faria isso?
Obrigado.
Comentário by Maurício Vinicius — 03/06/2009 @ 16:49