phpBB3Внешняя авторизация

Человеки, входящие в phpBBДовольно часто возникает необходимость в интеграции phpBB с другой системой, например с Drupal или Joomla. В этом случае Вам повезло — готовые модули для использования единой базы пользователей c phpBB 3 в обоих системах уже созданы.

Если же Вам нужно сделать единую авторизацию с более экзотической системой, то придется все делать самому. Ну или заказать разработку у специалистов.

К счастью, разработчики phpBB предусмотрели эту проблему, и заранее сделали механизм авторизации легко расширяемым. В этой статье мы попробуем написать свой простой плагин авторизации.

Запрет регистрации

Логично предположить, что перед активацией нашего модуля авторизации мы должны запретить регистрацию в самом phpBB. Создавая плагин авторизации заранее предпологается, что пользователи будут регистрироваться в другом месте.

Для этого в администраторском аккаунте перейдите на вкладку Общие, и в левом меню выберите «Регистрация пользователей». Далее отключаем регистрацию:

Запрет регистрации в phpBB

Все плагины авторизации расположены в директории includes/auth/. Там уже есть несколько готовых плагинов.

  • auth_db — плагин, включенный по умолчанию. Он отвечает за авторизацию через базу данных phpBB.
  • auth_apache — плагин, соответственно для авторизации использующий встроенные средства веб-сервера Apache.
  • auth_ldap — плагин, использующий для аутентификации сетевой протокол доступа к каталогам LDAP

Пусть наш плагин будет называться auth_simple. Создайте файл auth_simple.php в директории includes/auth с таким содержимым:

< ?php
 
/**
*
* Пример плагина авторизации для phpBB3
*
*/
 
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
	exit;
}
 
/**
* Функция, отвечающая за авторизацию.
*/
function login_simple(&$username, &$password)
{
 
           // Запрещаем пустой пароль.
           if (!$password)
           {
                      return array(
                                  'status' => LOGIN_ERROR_PASSWORD,
                                  'error_msg' => 'NO_PASSWORD_SUPPLIED',
                                  'user_row' => array('user_id' => ANONYMOUS),
                      );
           }
 
           // Запрещаем пустое имя пользователя.
           if (!$username)
           {
                      return array(
                                  'status' => LOGIN_ERROR_USERNAME,
                                  'error_msg' => 'LOGIN_ERROR_USERNAME',
                                  'user_row' => array('user_id' => ANONYMOUS),
                      );
           }
 
           // Обычная проверка на правильность.
           if ( ("test" === $username) && ("test" === $password)  )
           {
                // Сообщаем, что авторизация прошла успешно.
                return array(
                                  'status'     => LOGIN_SUCCESS,
                                  'error_msg'  => false,
                                  'user_row'	 => array(
                                     "username"       => $username,  // Отображаемое имя пользователя
                                     "user_password"  => phpbb_hash($password),  // phpbb-хеш пароля
                                     "user_email"     => "test@v673.com",  // E-mail пользователя, если существует
                                     "user_type"      => USER_NORMAL // Тип пользователя, объявленный в constants.php
                                 ),
                );
 
           }
 
 
           // Возвращаем ошибку авторизации.
           return array(
               'status'     => LOGIN_ERROR_PASSWORD,
               'error_msg'  => 'LOGIN_ERROR_PASSWORD',
               'user_row'   => array('user_id' => ANONYMOUS),
           );
 
}
 
?>

Теперь необходимо активировать наш плагин авторизации. Для этого перейдите в вкладку Общие и в левом меню выберите пункт Аутентификация. Выберите наш метод авторизации:

Выбор метода аутентификации

Все! Сегодня мы спрограммировали небольшой плагин для системы авторизации. Теперь Вы можете легко интегрировать phpBB с различными системами. В другой статье, которую напишу позже, я расскажу Вам более подробно о создании плагинов аутентификации.

P.S. К сожалению, моя статья писалась уже довольно давно, поэтому код, по всей видимости, уже не актуальный.

Вот отличная статья от karbuzov: Интеграция пользователей сайта и форума на phpbb 3


Есть мысли на этот счет:
kwon 09.11.2009 17:58 пишет:

ошибка —

Общая ошибка

Authentication method not found

происходит во время авторизации на форуме

kwon 10.11.2009 08:28 пишет:

Теперь другая картина... я вообще на форум попасть не могу! И в админку в частности !!! тоесть не могу вернуть auth_db на место!!!! как быть??? заменил код auth_simple.php кодом из auth_db — не помогло! как попасть в админку и вернуть все как было?

    v673 12.11.2009 06:10 пишет:

    Здравствуйте. Спасибо за комментарий! Уверен, выбор метода авторизации прописан где-то в конфигурации. Для более подробной информации об этих тонкостях можете проконсультироваться на форуме phpbbguru.net.

Александр 18.11.2009 12:01 пишет:

Как на счет WordPress? На United надежды нет.

    v673 21.11.2009 08:01 пишет:

    Писать плагин самому — плохая идея. Попробуйте подойти к решению проблемы с другой стороны. Можно воспользоваться bbPress от создателей WordPress? Или может поискать другие готовые плагины?

      Александр 21.11.2009 09:42 пишет:

      У меня phpbb3

bda 26.11.2009 15:15 пишет:

Добрый день! Отличная статья, но как мне показалось, немного незаконченная: такую «авторизацию» убивает моментально, ещё до появления страницы «Вы успешно вошли в систему.», несмотря на то, что значения, возвращаемые написанным мною модулем полностью идентичны стандартному «auth_db.php». да и если поискать по коду форума «USERS_TABLE», можно много чего найти. Очевидно, нужна какая-то более детальная инструкция для авторизации по внешней таблице... Либо надо сразу же на лету при авторизации добавлять туда недостающие записи с правами доступа по умолчанию... Сейчас пытаюсь найти информацию, но пока ничего не нашел. У вас есть ещё какая-нибудь информация, буду благодарен. Если туплю — извините, phpbb только вчера установил первый раз.

bda 26.11.2009 16:45 пишет:

Прошу прощения, какой-то глюк. расшифровываю:

все, разобрался сам. Стас, вы пропустили важный элемент в массиве «user_row»: «group_id», группа пользователя. Без неё user_add не работает, а её работоспособность необходима для создания обязательных записей в таблицах пользователей phpbb. Также я заменил все insert-ы в функции user_add на replace, это позволяет обновлять такие поля, как e-mail и группа пользователя при обычном его логине на форум.

для работы админки также необходимо подключение functions_user.php с помощью конструкции вида:

if (!function_exists ('user_add'))

{

if (file_exists ($phpbb_root_path . 'includes/functions_user.php')) include ($phpbb_root_path . 'includes/functions_user.php');

else include ($phpbb_root_path . '.../includes/functions_user.php');

}

    v673 05.12.2009 11:52 пишет:

    Спасибо за очень полезный комментарий, bda!

Mirgorod 13.08.2010 11:13 пишет:

Здравствуйте, bda, можете подробнее описать как же все таки сделать, что бы после того, как пользователь вошел и вывелось сообщение, что пользователь успешно вошел, сессия продолжалась?

Mirgorod 13.08.2010 11:19 пишет:

Возможно я прописал не тот идентификатор группы?

if ( («test» === $username) && («test» === $password) )

{

// Сообщаем, что авторизация прошла успешно.

return array (

'status' => LOGIN_SUCCESS,

'error_msg' => false,

'user_row' => array (

«username» => $username, // Отображаемое имя пользователя

«user_password» => phpbb_hash ($password), // phpbb-хеш пароля

//"user_email" => «test@v673.com», // E-mail пользователя, если существует

«user_type» => USER_NORMAL, // Тип пользователя, объявленный в constants.php

«group_id» => REGISTERED // Идентификатор группы

),

);

}

Есть что сказать?
Ваше имя:
Ваш e-mail:
Ваш сайт:
Ваше мнение:




земляные работы в Донецке