Интеграция авторизации phpbb3

Часто бывает необходимо сделать общую авторизацию для phpBB3. Например тогда когда сайт сделан на какойто определенное CMS а форум для сайта отдельно на phpBB3.

искал решения
в конце написал свой вариант

опишу вкратце

пример кода

пусть поле логина имеет имя login, а поле пароля login_pass


//- авторизируемся на форуме
//-- создаем переменные для форума
define('IN_PHPBB', true);

// Set phpBB root folder properly. Change in according to the actual board folder
//-- где расположен скрипт форума физически
define('PHPBB_ROOT_PATH', './forum/');
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';

$phpEx = substr(strrchr(__FILE__, '.'), 1);
//--подключаем библиотеки

include($phpbb_root_path . 'common.' . $phpEx);
require($phpbb_root_path . 'includes/functions_user.' . $phpEx);
require($phpbb_root_path . 'includes/functions_module.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('ucp');

// Initialize login result array
$login = array();

// Check if user has submitted login and password and try to log in
if(isset($_POST['login']) && $user->data['user_id'] == ANONYMOUS)
{
$username = request_var('login', '', true);

$password = request_var('login_pass', '', true);

$autologin = (!empty($_POST['autologin'])) ? true : false;
//-- $login будет содержать параметры пользователя если они ненужны то просто $auth->login($username, $password, $autologin);
$login = $auth->login($username, $password, $autologin);
}

само собой необходимо существование зарегистрированного пользователя в phpbb3

  • anonymous в phpbb3
  • интеграция Google AdWords и Analytics
  • phpbb3 Warning includes/auth/auth_.php
  • phpBB3 Внешняя авторизация
  • Интеграция SEOzavr в WordPress
  • 19 комментариев на “Интеграция авторизации phpbb3”

    1. Александр:

      А если нужно зделать чтоб проходила проверка на правильность логина пароля?

    2. для Александр:

      $login = $auth->login($username, $password, $autologin);

      $login будет содержать параметры
      в случае правильной авторизации данные в виде массива о учётке пользователя
      в случае ошибки , тоже набор данных в виде массива, один из элементов массива возвращаенного в $login код ошибки

    3. Александр:

      Спасибо разобрался!

    4. Не подскажите есть ли где подобного вида модули для интеграции phpbb3 нужно сделать единую регистрацию с phpbb3 на самописном двжике

    5. Снайперу:
      относительно модулей не знаю, не интересовался этим вопросом, может плагины в phpbb3 где и есть , вот вроде бы что-то похожее http://saintist.ru/2009/04/22/phpbb3-vneshnyaya-avtorizaciya/
      в принципе можно такой модуль самому написать код приведенный в статье дает базовые понятия

    6. Yurik:

      Вот спасибо. Пригодилось. =)

    7. Mr_add:

      Fatal error: Call to a member function session_begin() on a non-object in C:\xampp\xampp\htdocs\vashopit.local\www\useract.php on line 279

      на 279 лайне $user->session_begin();

      В чем может быть проблема? Версия форума — 3.0.7

    8. saintist:

      $user->session_begin();

      session_begin() не является методом класса user

      обновлял до 3.0.7 или скачал версию 3.0.7 ?

    9. Mr_add:

      Скачал. Ставил с нуля…

    10. saintist:

      спроси на форуме разработчиков, я эту версию не пробовал, так навскидку не смогу подсказать

    11. saintist:

      C:\xampp\xampp\htdocs\vashopit.local\www\useract.php

      листинг файла приведи

    12. Mr_add:

      Пожалуйста….

      0 && @$login && @$password)
      {
      @$clrow=mysql_fetch_array($clres);
      if((@$clrow[9]==1)&&(@$clrow[3]==@$password)) $access=true;
      }
      if(@$access)
      {
      setcookie(«vologin»,$login);
      setcookie(«vopwd»,$password);
      //———————-Пытаюсь открыть сессию————————————————
      $user->session_begin(false);
      $auth->acl($user->data);
      $user->setup(‘ucp’); //Кстати, в оригинальном файле index.php вместо ‘ucp’ стоит ‘viewforum’

      if(isset($_POST['vologin']) && $user->data['user_id'] == ANONYMOUS)
      {
      $auth->login($username, $password, true);
      }
      //——————————————————————————————
      $hh=»location: ../index.php».$_POST['from'];
      }
      else $hh=»location: ../index.php?id=6&act=1″;

      header($hh);
      }
      ?>

    13. saintist:

      а есть перед $user->session_begin();

      такой вот код ?

      define(‘IN_PHPBB’, true);
      $phpbb_root_path = (defined(‘PHPBB_ROOT_PATH’)) ? PHPBB_ROOT_PATH : ‘./’;
      $phpEx = substr(strrchr(__FILE__, ‘.’), 1);
      include($phpbb_root_path . ‘common.’ . $phpEx);
      include($phpbb_root_path . ‘includes/functions_display.’ . $phpEx);

    14. Mr_add:

      Конечно)… Он просто не прошел…

      ?php
      define(‘IN_PHPBB’, true);
      //global $phpbb_root_path, $phpEx;
      $phpbb_root_path = (defined(‘PHPBB_ROOT_PATH’)) ? PHPBB_ROOT_PATH : ‘./bb3/’;
      $phpEx = substr(strrchr(__FILE__, ‘.’), 1);
      include($phpbb_root_path . ‘common.’ . $phpEx);
      include($phpbb_root_path . ‘includes/functions_user.’ . $phpEx);
      require($phpbb_root_path . ‘includes/functions_module.’ . $phpEx);

    15. Mr_add:

      Добавил:
      include($phpbb_root_path . ‘includes/functions_display.’ . $phpEx);
      Та же ошибка((((

    16. saintist:

      попробуй не использовать common

      сделай загрузку только той части ядра которая тебе нужна

      посмотри исходники common

      $user->session_begin();

      session_begin находится в includes/session.php

      класс user наследует свойства класса session

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

      includes\session.php

    17. Mr_add:

      saintist, большое спасибо за участие… Проблема частично решена…
      Нужно перед «$user->session_begin();» вставить «$user = new user();» Т.е. должно быть
      $user = new user();
      $user->session_begin();
      Вот только что-то при переходе на форум просит авторизацию((… Похоже cookies надо ковырять.

    18. Юрий:

      Польщователь авторизовался. А как сделать возмоность разлогиниться (по ссылке «Выход», напр.)?

    19. saintist:

      примерно вот так

      сам кусок кода logout

      if ($user->data['user_id'] != ANONYMOUS && isset($_GET['sid']) && !is_array($_GET['sid']) && $_GET['sid'] === $user->session_id)
      {
      $user->session_kill();
      $user->session_begin();
      $message = $user->lang['LOGOUT_REDIRECT'];
      }

      т.е. уничтожаем сессию пользователя

      $user->session_kill();

      а отлавливать можно свою GET переменную заданную если ссылкой сделать logout в phpbb3