Часто бывает необходимо сделать общую авторизацию для 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
А если нужно зделать чтоб проходила проверка на правильность логина пароля?
для Александр:
$login = $auth->login($username, $password, $autologin);
$login будет содержать параметры
в случае правильной авторизации данные в виде массива о учётке пользователя
в случае ошибки , тоже набор данных в виде массива, один из элементов массива возвращаенного в $login код ошибки
Спасибо разобрался!
Не подскажите есть ли где подобного вида модули для интеграции phpbb3 нужно сделать единую регистрацию с phpbb3 на самописном двжике
Снайперу:
относительно модулей не знаю, не интересовался этим вопросом, может плагины в phpbb3 где и есть , вот вроде бы что-то похожее http://saintist.ru/2009/04/22/phpbb3-vneshnyaya-avtorizaciya/
в принципе можно такой модуль самому написать код приведенный в статье дает базовые понятия
Вот спасибо. Пригодилось. =)
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
$user->session_begin();
session_begin() не является методом класса user
обновлял до 3.0.7 или скачал версию 3.0.7 ?
Скачал. Ставил с нуля…
спроси на форуме разработчиков, я эту версию не пробовал, так навскидку не смогу подсказать
C:\xampp\xampp\htdocs\vashopit.local\www\useract.php
листинг файла приведи
Пожалуйста….
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);
}
?>
а есть перед $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);
Конечно)… Он просто не прошел…
?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);
Добавил:
include($phpbb_root_path . ‘includes/functions_display.’ . $phpEx);
Та же ошибка((((
попробуй не использовать common
сделай загрузку только той части ядра которая тебе нужна
посмотри исходники common
$user->session_begin();
session_begin находится в includes/session.php
класс user наследует свойства класса session
к сожалению у себя не нашел пример чтоб показать , делал проект там было отлично сделана в отдельном файле такая загрузка для обеспечения авторизации и работы с БД
includes\session.php
saintist, большое спасибо за участие… Проблема частично решена…
Нужно перед «$user->session_begin();» вставить «$user = new user();» Т.е. должно быть
$user = new user();
$user->session_begin();
Вот только что-то при переходе на форум просит авторизацию((… Похоже cookies надо ковырять.
Польщователь авторизовался. А как сделать возмоность разлогиниться (по ссылке «Выход», напр.)?
примерно вот так
сам кусок кода 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