Doctrine Auth Adapter para Zend Framework

Zend_Acl, Zend_Auth, Zend_Session

Moderador: diegotremper

Doctrine Auth Adapter para Zend Framework

Mensagempor TulioBraga » Qua Fev 17, 2010 6:54 pm

Zfb_Auth_Adapter_Doctrine

Pra quem não conhece:
http://www.doctrine-project.org/

A cerca de um mês atrás criei um Adapter do Zend_Auth que utiliza o framework Doctrine para realizar a autenticação de usuários, tendo em vista que todas as minhas ações de banco já eram feitas através dele, visando acabar com a dependência do Zend_Db. Sem muito tempo para postar, aproveitei este fim de carnaval para compartilhar com a comunidade. Quem tiver interesse é só acessar meu repositório do Zfb no github:

http://github.com/tuliobraga/zfb/tree/master/library/

Passos anteriores:

Criar a tabela de usuários.

Fazer o autoload das classes do Doctrine e do Zend Framework.
http://www.doctrine-project.org/documentation/manual/1_2/en/getting-started#implementing:bootstrap-file

Criar a conexão de banco no bootstrap. (Neste passo é interessante dar um nome para sua conexão - Segundo parâmtetro do Doctrine_Manager::connection())
http://www.doctrine-project.org/documentation/manual/1_2/en/introduction-to-connections#opening-new-connections

Gerar os models a partir do banco existente.
http://www.doctrine-project.org/documentation/manual/1_2/en/introduction-to-models#generating-models

Fazer o autoload dos models.
http://www.doctrine-project.org/documentation/manual/1_2/en/introduction-to-models#autoloading-models


Usando o Zfb_Auth_Adapter_Doctrine

O uso do Zfb_Auth_Adapter_Doctrine é muito semelhante ao uso do Zend_Auth_Adapter_Dbtable. Você deve passar o seu objeto de conexão de banco na instância do adapter da seguinte forma:

Código: Selecionar tudo
/* Capturando o objeto de conexão de banco */
$manager = Doctrine_Manager::getInstance();
$db = $manager->getConnection('nome_da_sua_conexão');

/* Instânciando o Adapter de autenticação. */
$authAdapter = new Zfb_Auth_Adapter_Doctrine($db);


O próximo passo é definir o nome da tabela de usuários. Diferentemente do Adapter Dbtable, você deve fornecer o nome da classe de model gerada pelo Doctrine, já que este executa suas querys, chamadas de DQL (Doctrine Query Language), baseado nas definições presentes nestas classes.

Código: Selecionar tudo
$authAdapter->setTableName('User');


Os próximos passos são idênticos aos do Zend_Auth_Adapter_Dbtable.

Implementação

A implementação deste Auth Adapter foi completamente baseada no Zend_Auth_Adapter_Dbtable, com todos os métodos e a mesma nomenclatura, tendo portanto as mesmas validações.

Diferenças

A propriedade protegida $_zendDb teve seu nome alterado para $_doctrineDb.
As querys foram reestruturadas para seguir os padrões e métodos de acesso do Doctrine.
O lançamento de exceções passou a seguir a hierárquia de exceções da biblioteca Zfb.

Exemplo

Este código espera que as variáveis $username e $password estejam definidas com os valores informados pelo usuário. Usado por mim encapsulado em um método estático que espera como parâmetros o nome de usuário e senha.

Código: Selecionar tudo
/* Capturando o objeto de conexão de banco */
$manager = Doctrine_Manager::getInstance();
$db = $manager->getConnection('nome_da_conexão');

/* Instânciando o Adapter de autenticação. */      
$authAdapter = new Zfb_Auth_Adapter_Doctrine($db);

/* Definindo tabela, coluna de identidade, coluna de senha, valor de identidade, valor de senha e tratamento para a senha */
$authAdapter->setTableName('User')
          ->setIdentityColumn('USERNAME')
          ->setCredentialColumn('PASSWORD')
          ->setIdentity($username)
          ->setCredential($password)
          ->setCredentialTreatment('MD5(?)');

/* Tentando autenticar */
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);

/* Verificando autenticação */
if($result->isValid()){
    /* Armazenando dados na sessão e retornando-os */
   $storage = new Zend_Auth_Storage_Session();
   $storage->write($authAdapter->getResultRowObject(null,'password'));
   return (array)$storage->read();
}else{
    /* Capturando mensagem de erro e lançando exceção */
   $error = $result->getMessages();
   throw new Zfb_Auth_Adapter_Exception($error[0]);
}


Espero que seja útil.

Até!
Avatar de usuário
TulioBraga
Participante
 
Mensagens: 97
Data de registro: Sex Mar 06, 2009 12:00 am
Localização: Belo Horizonte

Re: Doctrine Auth Adapter para Zend Framework

Mensagempor TulioBraga » Dom Abr 18, 2010 2:40 pm

Encontrei algumas novidades no wiki oficial do Zend Framework relacionada a integração Zend Framework/Doctrine ORM.

Zend_Auth_Adapter_Doctrine_Table Component Proposal:
http://framework.zend.com/wiki/pages/viewpage.action?pageId=3866950

Zend_Paginator_Adapter_Doctrine:
http://framework.zend.com/wiki/display/ZFPROP/Zend_Paginator_Adapter_Doctrine+-+Jason+Eisenmenger

Zend_Log_Writer_Doctrine Component Proposal:
http://framework.zend.com/wiki/display/ ... tthew+Lurz

Zend_Session_SaveHandler_Doctrine Component Proposal:
http://framework.zend.com/wiki/display/ ... tthew+Lurz

Zend_Application_Resource_Doctrine Component Proposal:
http://framework.zend.com/wiki/display/ ... tthew+Lurz

Zend Tool and Doctrine 2 Integration Component Proposal:
http://framework.zend.com/wiki/display/ ... in+Eberlei

Doctrine 2 está na versão Alpha 4.
Última versão estável: 1.2.2.
Avatar de usuário
TulioBraga
Participante
 
Mensagens: 97
Data de registro: Sex Mar 06, 2009 12:00 am
Localização: Belo Horizonte


Retornar para Autenticação e Autorização

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 0 visitantes