A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Plugin de Autenticação para o Joomla 1.5

Sex

26

Jun

2009


11:08

(6 votos, média 4.83 de 5) 


Joomla Os novos plugins de autenticação do Joomla 1.5 tornaram o sistema muito mais flexível e seguro. Agora é possível autenticar usuários das mais diversas origens - da base de dados interna do Joomla, do sistema Open ID, de um diretório LDAP, da base de dados do GMail ou qualquer outro sistema de autenticação que possa ser acessado usando PHP.

Neste tutorial veremos como criar um plugin de autenticação. É apenas um exemplo bem básico, com ênfase nos aspectos mais importantes... o assim chamado "caminho das pedras" para se criar um plugin personalizado.

A classe plgAuthenticationAutentica

Para criar um plugin Joomla 1.5 não precisamos começar do zero - basta usar a classe JPlugin como modelo. Quando criamos uma classe filha, ela herda todas as características da classe mãe. O novo objeto fornece toda a infraestrutura e todas as funcionalidades básicas e, a partir daí, só precisamos criar os métodos necessários para gerenciar o evento desejado.

Para criar um plugin de autenticação, o nome da classe filha precisa começar com plgAuthentication e terminar com o nome que você escolher. No nosso caso vamos usar o nome altamente criativo de Autentica :blush:, ou seja, nossa classe se chamará plgAuthenticationAutentica.

Esta classe terá dois métodos muito simples: constructor e onAuthenticate().

O construtor

O construtor precisa de um parâmetro, o qual deve ser passado por referência. Tudo o que o construtor faz é passar este parâmetro para o construtor da sua classe mãe. O nome deste método construtor é muito importante: deve ter o mesmo nome da classe. Veja abaixo: function plgAuthenticationAutentica(& $ocorrencia) { parent::__construct( $ocorrencia ); }

O construtor da classe mãe vai nos fazer o favor de atrelar nosso observador de eventos (o plugin) à ocorrência (o despachador de eventos).

Lidando com o evento

Quando um usuário estiver se autenticando, queremos capturar e tratar este evento específico. Quando isto ocorre, o método que é chamado pelo sistema é o onAuthenticate(). Este método precisa de três parâmetros: nome do usuário, senha e uma referência a um objeto do tipo JAuthenticationResponse. Com estes parâmetros o método vai poder determinar se o nome do usuário e a senha são uma combinação válida e vai poder retornar o resultado obtido através do objeto JAuthenticationResponse.

Só a título de exemplo, a verificação de autenticidade que vamos fazer é muito simples. Vamos verificar se o nome do usuário consta na tabela de usuários e, caso tenha sido encontrado, vamos checar se a senha deste usuário é o nome dele ao contrário. Veja a seguir:

$db =& JFactory::getDBO(); $query = 'SELECT `id`' . ' FROM #__users' . ' WHERE username=' . $db->quote( $nome ); $db->setQuery( $query ); $resultado = $db->loadResult(); // para autenticar, o nome do usuário precisa estar na base de dados e a // senha precisa ser o nome ao contrário (usuário maria teria a senha airam) if($resultado && ($nome == strrev( $senha )))

Este código bobinho pode ser substituído por um mais parrudo, com uma autenticação mais consistente. Só depende de você e dos seus conhecimentos de PHP smile

Depois de determinarmos o que ocorreu com a autenticação podemos criar respostas de acordo com o resultado:

$db =& JFactory::getDBO(); $query = 'SELECT `id`' . ' FROM #__users' . ' WHERE username=' . $db->quote( $nome ); $db->setQuery( $query ); $resultado = $db->loadResult(); if (!$resultado) { $resposta->status = JAUTHENTICATE_STATUS_FAILURE; $resposta->error_message = 'Usuário não existe'; } // para autenticar, o nome do usuário precisa estar na base de dados e a // senha precisa ser o nome ao contrário (usuário maria teria a senha airam) if($resultado && ($nome == strrev( $senha ))) { $email = JUser::getInstance($resultado); // Alinhar com o resto do sistema $resposta->email = $email->email; $resposta->status = JAUTHENTICATE_STATUS_SUCCESS; } else { $resposta->status = JAUTHENTICATE_STATUS_FAILURE; $resposta->error_message = 'Nome e senha inválidos'; }

Para as falhas, definimos duas propriedades do objeto resposta: as propriedades status e error_message. Existem três valores de status que são reconhecidos - JAUTHENTICATE_STATUS_SUCCESS, JAUTHENTICATE_STATUS_FAILURE e JAUTHENTICATE_STATUS_CANCEL. Para maiores informações sobre valores de status consulte a biblioteca libraries/joomla/user/authentication.php.

A propriedade error_message é definida caso a autenticação falhe. No nosso plugin determinamos dois valores possíveis: 'Usuário não existe', que indica que o usuário não foi encontrado na base de dados, e 'Nome e senha inválidos', indicando que a senha não é o inverso do nome. Por uma questão de segurança, o usuário só vai receber a mensagem 'Nome e senha inválidos' ou logar sem receber mensagem alguma. O Joomla pode ser configurado para que estas mensagens de erro sejam colocadas num arquivo de log para facilitar o debug.

Opcionalmente, se a autenticação funcionar, podemos colocar informações da nossa fonte de autenticação na resposta. Neste exemplo estamos buscando informações do usuário na base de dados do Joomla e guardando seu endereço de email no objeto resposta. Para mais informações sobre o tipo de dado que pode ser colocado num objeto resposta consulte a API do Joomla. Estes dados podem ser usados quando se quiser criar usuários automaticamente ou realizar outras tarefas de login.

O código completo

Definidos os dois métodos que são necessários para a nossa classe, podemos colocá-la num arquivo PHP que tenha o mesmo nome do plugin. Como o plugin foi chamado de Autentica, o arquivo receberá o nome de autentica.php. Segue a listagem completa do código:

quote( $nome ); $db->setQuery( $query ); $resultado = $db->loadResult(); if (!$resultado) { $resposta->status = JAUTHENTICATE_STATUS_FAILURE; $resposta->error_message = 'Usuário não existe'; } // para autenticar, o nome do usuário precisa estar na base de dados e a // senha precisa ser o nome ao contrário (usuário maria teria a senha airam) if($resultado && ($nome == strrev( $senha ))) { $email = JUser::getInstance($resultado); // Alinhar com o resto do sistema $resposta->email = $email->email; $resposta->status = JAUTHENTICATE_STATUS_SUCCESS; } else { $resposta->status = JAUTHENTICATE_STATUS_FAILURE; $resposta->error_message = 'Nome e senha inválidos'; } } } ?>

Note que, no início do código, importamos a definição da classe JPlugin com:

jimport('joomla.event.plugin');

O manifesto de instalação XML

O arquivo de instalação XML indica como o programa instalador do Joomla deve proceder. Neste caso, é bastante simples:

Authentication - Autentica Joomla! Documentation Project May 30, 2007 (C) 2005 - 2007 Open Source Matters. All rights reserved. http://www.gnu.org/copyleft/gpl.html GNU/GPL ian.maclennan @help.joomla.org www.joomla.org 1.5 An sample authentication plugin autentica.php

Esta é praticamente a cópia do arquivo xml do exemplo do Joomla. Observe apenas alguns detalhes.

  • O atributo grupo do elemento raiz: para plugins de autenticação, o atributo grupo precisa ter o valor 'authentication'. Isto faz com que o Joomla trate o plugin como um plugin de autenticação.
  • O atributo versão do elemento raiz: 1.5 indica que se trata de um plugin escrito para Joomla 1.5 que deve funcionar sem o modo legado.
  • O nome 'Authentication - Autentica': você NÃO precisa seguir esta convenção de nome, mas fica melhor no gerenciador de plugins quando se segue o padrão.
  • O atributo filename: este tem um atributo chamado plugin, cujo valor é o nome do nosso plugin (plugin="autentica").

Isto é tudo! Agora é só zipar os dois arquivos (autentica.php e autentica.xml) para criar um pacote de instalação automática. O texto original deste HOWTO você encontra documentação online do Joomla 1.5.

Grande abraço

vovo vó Vicki

биография Вадим Логофет ситон посуда официальный сайтооо полигон работаноутбук lenovolegal translationполигон ооо

Informações adicionais