School of Net


Utilizando Zend_Auth -

Filed under: Desenvolvimento — Tags: , , — Wesley Willians @ 15:22

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

auth): ?>
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!


5 Comentários »

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

RSS feed for comments on this post. TrackBack URL


Leave a comment