[FAQ] Интеграция входа на конференцию phpBB с сайтом

Темы по наиболее часто задаваемым вопросам без привязки к версии phpBB. Читать в первую очередь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB 3.1.x/3.2.x/3.3.x | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16948
Стаж: 18 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 549 раз
Поблагодарили: 1701 раз

[FAQ] Интеграция входа на конференцию phpBB с сайтом

Сообщение rxu »

Ниже приведен пример скрипта с интегрированной формой входа на конференцию (общего вида).
В приведённом примере папка, в которой находится скрипт, находится на один уровень выше папки конференции. Файлы конференции находятся в папке phpBB3 относительно скрипта.

По коду скрипта имеются пояснительные комментарии (на английском языке).

Вопросы принимаются в этой теме.

Версия 1.1.0 с интегрированным списком онлайн и легендой групп здесь.
Версия 1.2.0 с аватарой здесь.

Версия 2.0.1 для phpBB 3.2/3.3 здесь.

login_1.0.5.zip
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось rxu 22.05.2020 8:37, всего редактировалось 6 раз.
Изображение
Salex007
phpBB 1.0.0
Сообщения: 3
Стаж: 14 лет 6 месяцев

Re: Единый вход на сайт и на форум

Сообщение Salex007 »

Да, конечно :)
Все сделано с нуля и только ручками.
Благо это уже третий сайт у меня.
Вот только форум ни разу не прикручивал. Делал свои простые...

Спасибо. Значит буду читать внимательнее...

Добавлено спустя 2 часа 44 минуты 38 секунд:
В общем посидел подумал...
Получилось две части кода.
Если делать все в одном файле, то для того чтобы разместить форму в нужном месте придется отключить 'header' не только в 'login.php' но и в 'includes/session.php' строка 1007. Кроме того придется закрывать "родное" соединение с MySQL перед подключением 'login.php' , а затем опять открывать.

Первую включаем до вывода информации, чтобы не ругалось из-за 'header'

Код: Выделить всё

<?php
//---my code
//Change in according to the actual code
function recoding_for_forum($data_string)
{
	$data_string=iconv("cp1251", "UTF-8", $data_string);
	return $data_string;
}
function recoding_for_site($data_string)
{
	$data_string=iconv("UTF-8", "cp1251", $data_string);
	return $data_string;
}
//---end my code

//Start login.php code
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);

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

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

// Handle logouot button if pressed
if(isset($_POST['logout']) && $user->data['user_id'] != ANONYMOUS)
{
	$user->session_kill();
}

// Check if user has submitted login and password and try to log in
if(isset($_POST['login']) && $user->data['user_id'] == ANONYMOUS)
{
	//---my code
	$_POST['username']=recoding_for_forum($_POST['username']);
	$_POST['password']=recoding_for_forum($_POST['password']);
	$username = $_POST['username'];
	$password = $_POST['password'];
	//---end my code	
	//$username = request_var('username', '', true);
	//$password = request_var('password', '', true);
	$autologin	= (!empty($_POST['autologin'])) ? true : false;

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

// Send headers
//header('Content-type: text/html; charset=UTF-8');

header('Cache-Control: private, no-cache="set-cookie"');
header('Expires: 0');
header('Pragma: no-cache');

//---my code
if (!$user->data['is_registered'])
{
	//here you can create or delete you session data
}
if ($user->data['user_id'] != ANONYMOUS)
{
	//here you can create or delete you session data
}
//---end my code
?>
А вторую в том месте, где хотим получить вывод формы.

Код: Выделить всё

<?php
// Check if user has tried to log in and greet him if login is successful
if((!empty($login) && $login['status'] == LOGIN_SUCCESS) || $user->data['user_id'] != ANONYMOUS)
{
	// Reset permissions data if user has just logged in
	if(!empty($login))
	{
		$auth->acl($user->data);
	}
	echo 'Hello, ' . recoding_for_site(get_username_string('full', $user->data['user_id'], $user->data['username'], $user->data['user_colour']));
	echo '<form method="post">';
	echo '	<input type="submit" name="logout" value="LOGOUT" />';
	echo '</form>';
}
else
{
	// Handle login errors if exist and display error message right above the login form
	if(isset($login['error_msg']) && $login['error_msg'])
	{
		$err = $user->lang[$login['error_msg']];
		// Assign admin contact to some error messages
		if ($login['error_msg'] == 'LOGIN_ERROR_USERNAME' || $login['error_msg'] == 'LOGIN_ERROR_PASSWORD')
		{
			$err = (!$config['board_contact']) ? sprintf($user->lang[$login['error_msg']], '', '') : sprintf($user->lang[$login['error_msg']], '<a href="mailto:' . htmlspecialchars($config['board_contact']) . '">', '</a>');
		}
				
		echo recoding_for_site($err) . '<br />';
	}
	
	// Show login form
	echo '<form method="post">';
	echo recoding_for_site($user->lang['USERNAME']) . ':&nbsp;<input type="text" name="username" id="username" size="10" title="' . recoding_for_site($user->lang['USERNAME']) . '" /> ';
	echo recoding_for_site($user->lang['PASSWORD']) . ':&nbsp;<input type="password" name="password" id="password" size="10" title="' . recoding_for_site($user->lang['PASSWORD']) . '" />';
	echo '	<input type="submit" name="login" value="LOGIN" />';
	if ($config['allow_autologin'])
	{
		echo '  <br /><input type="checkbox" name="autologin" /> ' . recoding_for_site($user->lang['LOG_ME_IN']);
	}
	echo '</form>';
}
?>
Вот так вроде работает правильно. И мою кодировку не портит.
igrok
phpBB 1.0.0
Сообщения: 4
Стаж: 14 лет 4 месяца

Вопрос объединения систем авторизации сайта и форума

Сообщение igrok »

Имеется некий сайт, а при нём развёрнут phpbb-форум (3.0.8). База данных единая для сайта и форума.
И хозяин сайта, и создатель сайта зарегистрированы на форуме в качестве администраторов. Хочется объединить системы авторизации сайта и форума. То есть, чтобы зарегистрированный администратор форума обладал правами администратора сайта. Как это осуществить?

Программируя систему администрирования сайта, я понимаю, что надо связаться с некой uzer-таблицей (таблицами) форума, чтобы установить следующие факт: вошедший в систему пользователь зарегистрирован на форуме в качестве администратора. Этот факт я могу в качестве логической величины использовать в сессии, определяя допуск пользователя к тем или иным страницам сайта. Подскажите, если не затруднительно, в каких полях (имена полей) каких таблиц (имена таблиц) есть требуемые параметры для анализа?
И задача наоборот, если посетитель логинится на сайте, в какие таблицы форума какие параметры надо внедрить, чтобы он перешёл на форум как уже залогинившийся.
Я заметил, чтобы зайти в админку форума, надо проходить "двойной кордон" (2-раза логиниться), по этому пусть вопрос 2-го кордона для входа в админку форума пока не рассматривается.
Аватара пользователя
Warlock75
Former team member
Сообщения: 1429
Стаж: 17 лет 2 месяца
Откуда: Москва
Благодарил (а): 40 раз
Поблагодарили: 50 раз

Re: Вопрос объединения систем авторизации сайта и форума

Сообщение Warlock75 »

igrok писал(а):Имеется некий сайт
Для многих движков есть мостики.
igrok писал(а): в какие таблицы форума какие параметры надо внедрить, чтобы он перешёл на форум как уже залогинившийся
Не известно, что увас стоит, какой движок сайта.
Внимательно изучаем форум и чиаем FAQ. 95% всех ответов на возможные вопросы там уже есть!

Правила
Мини FAQ по phpBB 3.1.x/3.2.x/3.3.x
Как устанавливать расширения
igrok
phpBB 1.0.0
Сообщения: 4
Стаж: 14 лет 4 месяца

Re: Вопрос объединения систем авторизации сайта и форума

Сообщение igrok »

Из готовых движков я использовал только движок форума. Движок сайта пишу на PHP сам. Поэтому, мне бы знать "точки привязки", остальное постараюсь осилить.
Аватара пользователя
Warlock75
Former team member
Сообщения: 1429
Стаж: 17 лет 2 месяца
Откуда: Москва
Благодарил (а): 40 раз
Поблагодарили: 50 раз

Re: Вопрос объединения систем авторизации сайта и форума

Сообщение Warlock75 »

Смотря какой степени интеграции вы хотите добиться. Права доступа, смена пароля, регистрация, авторизация и т.д.
Поставьте четко задачу. Какие требования?
Внимательно изучаем форум и чиаем FAQ. 95% всех ответов на возможные вопросы там уже есть!

Правила
Мини FAQ по phpBB 3.1.x/3.2.x/3.3.x
Как устанавливать расширения
igrok
phpBB 1.0.0
Сообщения: 4
Стаж: 14 лет 4 месяца

Re: Вопрос объединения систем авторизации сайта и форума

Сообщение igrok »

Вопрос авторизации (совместной сайта и форума).
Расуждаю так: скажем, некий (логин)Иван (пароль)Пупкин зарегистрирован на форуме в качестве администратора. Полагаю, что "звание" администратора соответствует некой логической "галочке" в какой-то юзер-таблице БД (в графе данного юзера - Пупкина Ивана). Когда Пупкин Иван авторизуется на форуме, предполагаю, что система форума проверяет его принадлежность зарегистрированным пользователям и конкретно к группе администраторов и выставляет некий "флажок" в сессии. Получается, пока Пупкин бродит по форуму, на каждой странице считывается этот "флажок" для определения полномочий Пупкина. Значит если Пупкин перейдёт по ссылке с форума на сайт, то флажок останется в сессии, а значит я могу перехватить этот флажок и по его состоянию судить допускать ли пользователя к администрированию сайта или нет.
В итоге, мне нужно знать либо сессионную переменную, которая образуется при авторизации на форуме администратора, либо идти другим путём... с изначальной авторизацией Пупкина на сайте, с дальнейшим анализом таблиц форума, чтобы он на форум уже переходил, как авторизованный клиент.

Затем, возможно, не всякий администратор форума будет допущен к администрированию сайта. Поэтому мне бы очень не помешала бы какая-нибудь пользовательская галочка персонально устанавливаемая из админки форума и означающая допуск к администрированию сайта. В этом случае можно, наверное, было бы при авторизации данного пользователя на форуме формировать сессионную логическую переменную, которую я мог бы анализировать уже на сайте в качестве определителя, дающего допуск к администрированию сайта.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16948
Стаж: 18 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 549 раз
Поблагодарили: 1701 раз

Re: Вопрос объединения систем авторизации сайта и форума

Сообщение rxu »

igrok
[FAQ RC] Интеграция входа на конференцию с сайтом

Добавлено спустя 2 минуты 57 секунд:
После интеграции сессии форума в сайт можно использовать систему прав доступа phpBB.
Например, $auth->acl_get('a_'); - это администратор.
Изображение
igrok
phpBB 1.0.0
Сообщения: 4
Стаж: 14 лет 4 месяца

Re: Вопрос объединения систем авторизации сайта и форума

Сообщение igrok »

to rxu

Спасибо за подсказку!
Аватара пользователя
Alek$
Former team member
Сообщения: 2616
Стаж: 19 лет 9 месяцев
Откуда: Новосибирск
Поблагодарили: 3 раза

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение Alek$ »

Темы объединены.
Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.
AlexShaman
phpBB 1.0.0
Сообщения: 2
Стаж: 14 лет 4 месяца

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение AlexShaman »

Ранее звучал вопрос и он остался без ответа, я повторюсь.

Как при превышении количества попыток входа, в скрипте rxu'a вставить каптчу от phpbb3 (полностью эмулировать страницу входа phpbb3)?
Хотя бы дайте направление для раскопок. Заранее спасибо!
AlexShaman
phpBB 1.0.0
Сообщения: 2
Стаж: 14 лет 4 месяца

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение AlexShaman »

Сам спросил, сам овечаю как добавить каптчу.

Курил функцию login_box() из functions.php и вам советую.

Код: Выделить всё


if (isset($_POST['login']))
{
$template = new template();

switch ($login['status'])
	{
	case LOGIN_ERROR_ATTEMPTS:
		$captcha = phpbb_captcha_factory::get_instance($config['captcha_plugin']);
		$captcha->init(CONFIRM_LOGIN);
		$template->assign_vars(array('CAPTCHA_TEMPLATE'	=> $captcha->get_template(),));
		$err = $user->lang[$login['error_msg']];
	break;

	case LOGIN_ERROR_PASSWORD_CONVERT:
	$err = sprintf(
		$user->lang[$result['error_msg']],
		($config['email_enable']) ? '<a href="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=sendpassword') . '">' : '',
		($config['email_enable']) ? '</a>' : '',
		($config['board_contact']) ? '<a href="mailto:' . htmlspecialchars($config['board_contact']) . '">' : '',
		($config['board_contact']) ? '</a>' : ''
		);
	break;
            
	default:
	$err = $user->lang[$login['error_msg']];

	if ($login['error_msg'] == 'LOGIN_ERROR_USERNAME' || $login['error_msg'] == 'LOGIN_ERROR_PASSWORD')
		{
		$err = (!$config['board_contact']) ? sprintf($user->lang[$login['error_msg']], '', '') : sprintf($user->lang[$login['error_msg']], '<a href="mailto:' . htmlspecialchars($config['board_contact']) . '">', '</a>');
		}
	break;

	}
		
echo $err; // Выводим ошибки

if($login['status']==LOGIN_ERROR_ATTEMPTS) 
	{
	echo '<img src="Ваш путь/forum/ucp.php?mode=confirm&'.$template->_rootref['CONFIRM_IMAGE_LINK'].'&null=" alt="Код подтверждения"  />
	<input type="text" name="confirm_code" size="8" maxlength="8" title="Код подтверждения" />
	<input type="hidden" name="confirm_id" value="'.$template->_rootref['CONFIRM_ID'].'" />';
    }
}
Tuan
phpBB 1.0.0
Сообщения: 3
Стаж: 14 лет 4 месяца

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение Tuan »

Нужна помощь.
Есть скрипт интеграции пользователей с сайтом, но для его работы в форуме нужно перенаправлять с авторизации и регистрации на аналогичные страницы сайта.
Собственно, где и как это сделать ? )
Аватара пользователя
Nekstati
Поддержка
Поддержка
Сообщения: 3336
Стаж: 16 лет 1 месяц
Благодарил (а): 17 раз
Поблагодарили: 561 раз

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение Nekstati »

Изменить ссылки на авторизацию и регистрацию можно в файле styles/stylename/template/overall_header.html.
Tuan
phpBB 1.0.0
Сообщения: 3
Стаж: 14 лет 4 месяца

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение Tuan »

А там, собственно, что где ? )
Что-то не могу найти..
Shredder
Former team member
Сообщения: 2233
Стаж: 16 лет 4 месяца
Благодарил (а): 142 раза
Поблагодарили: 140 раз

Re: [FAQ RC] Интеграция входа на конференцию с сайтом

Сообщение Shredder »

Tuan
Регистрация
<a href="{U_REGISTER}">
Вход
<a href="{U_LOGIN_LOGOUT}"
Перенесено из форума FAQ (phpBB 3.0.x) в форум FAQ 28.09.2016 15:02 модератором rxu

Вернуться в «FAQ»