Введение
Новые проверки подлинности системы плагинов для Joomla! 1,5 предлагает большую гибкость и мощность в систему. Использование новой системы, можно для проверки подлинности пользователей из любого источника - Joomla! внутренней базы данных, системы Open ID, каталогов LDAP, или любой системой проверки подлинности, которые можно получить с помощью PHP.
Этот документ представит действительно простой пример аутентификации плагин, который показывает, как создавать собственные плагины аутентификации для Joomla! рамки.
PlgAuthenticationMyauth класса
Joomla! 1,5 плагины создаются путем создания дочернего класса из класса JPlugin. Класс JPlugin предоставляет всю инфраструктуру и базовые функции, что требуется. Все, что необходимо, это предоставить необходимые методы для обработки нужное событие.
Чтобы создать плагин аутентификации, имя ребенка класса должно начинаться с plgAuthentication, и должно заканчиваться имя плагина, который создается. В нашем случае, плагин называется Myauth, так что класс будет называться plgAuthenticationMyauth.
Класс будет иметь два метода. Первый метод конструктора. Второй метод onAuthenticate () метод. Эти методы на самом деле очень просто, как будет показано.
PlgAuthenticationMyauth () метод
Конструктор должен принимать один параметр, который должен передаваться по ссылке. Все это будет сделать, это пройти этот параметр на конструктор родительского класса. Следует отметить, что этот конструктор метод должен иметь то же имя, как класса. Название "__construct" не может быть использована, так PHP4 не поддерживает этот механизм и исправить, который используется в Joomla! ядро не позволит проходящей аргументы по ссылке. Таким образом, наш конструктор выглядит следующим образом:
function plgAuthenticationMyauth(& $subject) {
parent::__construct($subject);
}
Родительский конструктор будет обрабатывать подключения нашего мероприятия наблюдателя (плагина) к этому вопросу (диспетчер событий).
OnAuthenticate () метод
OnAuthenticate () метод метод, который будет вызван, когда система пытается использовать ваш плагин для проверки подлинности пользователя. Этот метод будет передано три параметра: имя пользователя, пароль и ссылку на объект типа JAuthenticationResponse. Этот метод требует, чтобы определить имя пользователя и пароль допустимое сочетание для аутентификации и возвращения результата в объект JAuthenticationResponse.
Для нашего примера, проверка подлинности, что мы собираемся сделать, это очень просто. Мы просто убедитесь, что указанное имя пользователя существует в таблице пользователей, и если это произойдет, мы будем проверять, чтобы увидеть, если имя пользователя является обратной пароль. Таким образом, наша проверка подлинности будет выглядеть так:
$db =& JFactory::getDBO();
$query = 'SELECT `id`'
. ' FROM #__users'
. ' WHERE username=' . $db->quote( $credentials['username'] );
$db->setQuery( $query );
$result = $db->loadResult();
/ / Для аутентификации, имя пользователя должно существовать в базе данных, и пароль должны быть равны
/ / В обратном имя пользователя (так что пользователь JoeBlow бы пароль wolbeoj)
if($result && ($credentials['username'] == strrev( $credentials['password'] )))
Хотя это очень простой в нашем примере, этот код может быть заменен на любой код, который необходимо выполнить проверку подлинности, что необходимо для вашего плагина. Гибкость ограничивается только тем, что PHP может сделать.
Теперь у нас есть определить, является ли или не подлинности успешно, теперь мы можем создать наш ответ:
$db =& JFactory::getDBO();
$query = 'SELECT `id`'
. ' FROM #__users'
. ' WHERE username=' . $db->quote( $credentials['username'] );
$db->setQuery( $query );
$result = $db->loadResult();
if (!$result) {
$response->status = JAUTHENTICATE_STATUS_FAILURE;
$response->error_message = 'User does not exist';
}
/ / Для аутентификации, имя пользователя должно существовать в базе данных, и пароль должны быть равны
/ / В обратном имя пользователя (так что пользователь JoeBlow бы пароль wolbeoj)
if($result && ($credentials['username'] == strrev( $credentials['password'] )))
{
$email = JUser::getInstance($result); //Принесите это в соответствии с остальной частью системы
$response->email = $email->email;
$response->status = JAUTHENTICATE_STATUS_SUCCESS;
}
else
{
$response->status = JAUTHENTICATE_STATUS_FAILURE;
$response->error_message = 'Invalid username and password';
}
Для ответов не удалось, положим два свойства объекта ответа: статус собственности, и error_message собственности. В настоящее время Есть три признается значение статуса ответа - JAUTHENTICATE_STATUS_SUCCESS, JAUTHENTICATE_STATUS_FAILURE, и JAUTHENTICATE_STATUS_CANCEL. Для получения дополнительной информации на эти значения состояния, консультации libraries/joomla/user/authentication.php файл.
Error_message свойство имеет значение в случае проверки подлинности не удается. В наш плагин, положим два возможных значения этого свойства: "Username and password do not match", который указывает, что наш запрос не дал результатов, и "Invalid username and password", которая указывает, что пароль не обратный имя пользователя. Следует отметить, что эти значения не будут возвращены пользователю. По соображениям безопасности, единственное, что пользователь будет видеть успешных Войти или сообщение об ошибке: "Username and password do not match". Joomla! Система может быть настроена так, что эти сообщения об ошибках могут быть сохранены в файл журнала в целях отладки.
Если авторизация прошла успешно, можно по желанию добавить информацию из нашей проверки подлинности источника в ответ. В этом случае, мы извлечения информации о пользователе из Joomla! базы данных и хранения электронной почты в объекте ответа. Для получения дополнительной информации о том, что данные могут храниться в объект ответа, пожалуйста, обратитесь http://api.joomla.org. Эти данные затем могут быть использованы пользователем плагинов в случае желательно, чтобы автоматически создать пользователя или выполнить другие Войти задач.
Полное myauth.php файла
Теперь, когда мы завершили два метода, которые необходимы для нашего класса, мы ставим наш класс в файл PHP, который имеет то же имя, как наш плагин. Так как наш плагин называется Myauth, мы называем наш файл myauth.php. Вот полный листинг на данный файл:
<?php
/**
* @version $Id: myauth.php 7180 2007-04-23 16:51:53Z jinx $
* @package Joomla.Tutorials
* @subpackage Plugins
* @license GNU/GPL
*/
// Проверьте, чтобы обеспечить этот файл включен в Joomla!
defined('_JEXEC') or die();
jimport('joomla.event.plugin');
/**
* Пример проверки подлинности плагин. На основании example.php плагин в Joomla! Основные установки
*
* @package Joomla.Tutorials
* @subpackage Plugins
* @license GNU/GPL
*/
class plgAuthenticationMyauth extends JPlugin
{
/**
* Constructor
*
* Для php4 совместимость мы не должны использовать __constructor как конструктор для плагинов
* Потому func_get_args (недействительными) возвращает копии всех переданных аргументов не ссылки.
* Это вызывает проблемы с перекрестными ссылками необходимые для шаблона проектирования наблюдателя.
*
* @param object $subject The object to observe
* @since 1.5
*/
function plgAuthenticationMyauth(& $subject) {
parent::__construct($subject);
}
/**
* Этот метод должен обрабатывать любые проверки подлинности и доложить о теме
* В этом примере используется простая аутентификация - это проверка, если пароль является обратной
* От имени пользователя (и пользователь существует в базе данных).
*
* @access public
* @param array $credentials Массив, содержащий учетные данные пользователя ('username' и 'password')
* @param array $options дополнительных опций
* @param object $response аутентификации объект ответа
* @return boolean
* @since 1.5
*/
function onAuthenticate( $credentials, $options, &$response )
{
/*
* Здесь вы могли бы сделать все, что нужно для проверки подлинности программа с учетными данными
*
* В данном примере смешанной переменной $return будет установлен в ложной
* Если проверка подлинности рутина не может или целого идентификатор пользователя подлинности
* Пользователь, если процедура проходит
*/
$db =& JFactory::getDBO();
$query = 'SELECT `id`'
. ' FROM #__users'
. ' WHERE username=' . $db->quote( $credentials['username'] );
$db->setQuery( $query );
$result = $db->loadResult();
if (!$result) {
$response->status = JAUTHENTICATE_STATUS_FAILURE;
$response->error_message = 'User does not exist';
}
/ / Для аутентификации, имя пользователя должно существовать в базе данных, и пароль должны быть равны
/ / В обратном имя пользователя (так что пользователь JoeBlow бы пароль wolbeoj)
if($result && ($credentials['username'] == strrev( $credentials['password'] )))
{
$email = JUser::getInstance($result); //Принесите это в соответствии с остальной частью системы
$response->email = $email->email;
$response->status = JAUTHENTICATE_STATUS_SUCCESS;
}
else
{
$response->status = JAUTHENTICATE_STATUS_FAILURE;
$response->error_message = 'Invalid username and password';
}
}
}
?>
Вы заметите, что мы должны добавить
jimport('joomla.event.plugin');
к началу нашего файла для загрузки определение JPlugin класса.
XML инсталяции
Теперь, когда мы создали наш JPlugin класс, все мы должны сделать, это создать наш XML-файл установки, которые скажут Joomla! установки, как установить наш плагин. Этот файл просто:
<?xml version="1.0" encoding="utf-8"?>
<install version="1.5" type="plugin" group="authentication">
<name>Authentication - Myauth</name>
<author>Joomla! Documentation Project</author>
<creationDate>May 30, 2007</creationDate>
<copyright>(C) 2005 - 2007 Open Source Matters. All rights reserved.</copyright>
<license>http://www.gnu.org/copyleft/gpl.html GNU/GPL</license>
<authorEmail> Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript </authorEmail>
<authorUrl>www.joomla.org</authorUrl>
<version>1.5</version>
<description>An sample authentication plugin</description>
<files>
<filename plugin="myauth">myauth.php</filename>
</files>
<params/>
</install>
Вы заметите, что этот файл очень похож на любой другой Joomla! XML установки файла манифеста. Есть несколько важных вещей, чтобы уведомления.
Первое, что нужно уведомление группы атрибут корневой элемент. Для проверки подлинности плагины, группа атрибут должен иметь "подлинности" значение. Это говорит о Joomla! Система для лечения вашего плагина, как аутентификация плагин.
Важно также отметить, что версия атрибут корневой элемент (установка) должно быть 1,5. Это скажет Joomla! , что ваш плагин написанный для Joomla! 1,5 и будет работать без наследие режима.
Мы вошли в название "Аутентификация - Myauth" в поле имени. Ваш плагин не должен следовать этому соглашению, но он выглядит лучше, потому что тогда он будет соответствовать стандартные модули проверки подлинности, которые перечислены в менеджер плагинов.
Наконец, обратите внимание, что имя файла атрибут, который содержит наш плагин файл атрибут плагина. Значение этого должно быть название нашего плагина. В этом случае, это myauth.
Упаковка все это и использовать его
Теперь, когда мы создали два файла, все, что нам нужно сделать, это пакет их на архивный файл, который может быть прочитан Joomla! установки системы.
Как только мы пакетов и установить наш плагин, он готов к использованию. Плагин опубликован с помощью диспетчера подключаемых модулей. Все плагины аутентификации будут сгруппированы вместе. Плагины включены по "их публикации. Вы можете опубликовать как многие плагины аутентификации, как вы хотите. Для успешной аутентификации, чтобы произойти, только один из плагинов должен возвращать результат JAUTHENTICATE_STATUS_SUCCESS.
Заключение
Теперь мы создали простой аутентификации плагин. Мы показали, основной процесс делает проверку подлинности и возвращения результатов Joomla! системы.
Вы также можете легко проверить этот плагин, упаковка это самостоятельно.
