Исходный код метода onUserAuthenticate () приведен в листинге ниже.
Листинг: Метод onUserAuthenticate () для аутентификации средствами Joomla
function onUserAuthenticate($credentials, $options, &$response) { $response->type = 'Joomla'; // В Joomla! пустые пароли не допускаются if (empty($credentials['password'])) { $response->status = JAUTHENTICATE_STATUS_FAILURE; $response->error_message = Text:('JGLOBAL_AUTH_EMPTY_PASS_NOT_ALLOWED'); return false; } // инициализировать переменные $conditions = ''; // получить объект базы данных $db = JFactory:igetDbo(); $query = $db->getQuery(true); $query->select('id, password'); $query->from('# users'); $query->where('username=' . $db->Quote($credentials['username'])); $db->setQuery($query); $result = $db->loadObject(); if ($result) { $parts = explode(':', $result->password); $crypt = $parts[0]; $salt = 0$parts[l]; $testcrypt = JUserHelper::getCryptedPassword( $credentials['password'], $salt); if ($crypt == $testcrypt) { // привести в соответствие с остальной системой $user = JUser::getlnstance($result- >id); $response->email = $user->email; $response->fullname = $user->name; if (JFactory::getApplication()->isAdmin()) { $response->language = $user->getParam('admin_language1); } else { $response->language = $user->getParam('language 1); } $response->status = JAUTHENTICATE_STATUS_SUCCESS; $response->error_message = 11; } else { $response->status = JAUTHENTICATE_STATUS_FAILURE; $response->error_message = bJText:(1JGLOBAL_AUTH_INVALID_PAS S'); } } else { $response->status = JAUTHENTICATE_STATUS_FAILURE; $response->error_message = JText1JGLOBAL_AUTH_NO_USER'); } }
Проанализируем исходный код данного метода, начав с двух ниже приведенных первых строк.
function onUserAuthenticate($credentials, $options, &$response) {
Метод onUserAuthenticate () принимает три аргумента. Первый аргумент $credentials представляет собой ассоциативный массив с двумя элементами: "password" и "username", обозначающими соответственно пароль и имя пользователя, введенные в форме регистрации. Второй аргумент $ opt ions в данном методе не используется.
А третий аргумент $ response имеет особое значение. Обратите внимание на предшествующий ему знак амперсанда (&), указывающий на то, что этот аргумент передается по ссылке. Это означает, что при внесении изменений в объект во время выполнения вызываемого метода они будут доступны и в вызывающем методе.
Подробнее об этом — в приведенной далее статье "Присваивание и передача объектов по ссылке".
Этот метод возвращает логическое значение false, если регистрация не прошла успешно, а иначе он завершается, не возвращая никакого значения. Но данные вызывающему методу все же передаются, поскольку в объект $ response внесены изменения, которые становятся доступными вызывающему методу по завершении данного метода.
Понравился материал? Пригодилась информация? Плюсани в социалки!
|