Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Авторизация на сайте и авторизация на форуме

Форум для авторов модов для phpBB 2.0.x.
Descriptor
phpBB 1.0.0
Сообщения: 6
Стаж: 19 лет 1 месяц

Авторизация на сайте и авторизация на форуме

Сообщение Descriptor »

Извините, может быть вопрос ламерский, но я бы хотел объединить авториацию на сайте и на форуме. При авторизации на сайте посылаются куки, которые потом читает форум.
Я хотел спросить у профессионалов: какие именно куки нужно, и что в них записать, чтобы форум потом при регистрации сессии все верно считал.
Спасибо.
Адекватный дизайн | [url=hhtp://printgraphics.ru]Типография, бесплатный заказ[/url]
[test]
phpBB 1.2.0
Сообщения: 17
Стаж: 19 лет 1 месяц
Контактная информация:

Сообщение [test] »

А я пробывал делать наоборот, использовать на сайте базу данных пользователей форума.
То есть логинился на форуме, а потом гулял по сайту с уже определенным пользователем.
Вот где-то такая схема была проверки на каждой странице, что требовали идентификации.

Кстати, может отцы подскажут, может я где накосячил в этой функции.

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

function Auth() {
	// do not retrive twice
	if (isset($GLOBALS['L_USER'])) return $GLOBALS['L_USER']; 
	
	$result = array();
	$result['user_id'] = -1; // default we have anonymous user
	// check for session
	$cookieusersid = stripslashes($_COOKIE['phpbb2mysql_sid']);
	// check for saved session
	$cookiedata = unserialize(stripslashes($_COOKIE['phpbb2mysql_data']));

	if (!empty($cookiedata) and !empty($cookieusersid)) {
	  // fetch active session
		$query = "SELECT session_user_id FROM forum_sessions
							WHERE session_id='$cookieusersid' AND `session_logged_in`=1 LIMIT 1";
		$qresult = DBQuery($query);
		if (mysql_num_rows($qresult)) { // heh, user have a really good sessions
			$qdata = mysql_fetch_assoc($qresult);
			$result['user_id'] = $qdata['session_user_id'];
		};
		mysql_free_result($qresult);
	} else if (!empty($cookiedata) and !empty($cookiedata['autologinid'])) {
		// remembered session, we must validate password
		$cookiedata['autologinid'] = addslashes($cookiedata['autologinid']);
		$cookiedata['userid'] = (int)$cookiedata['userid'];
		$query = "SELECT `user_id` FROM forum_users 
							WHERE `user_id`='{$cookiedata['userid']}' AND
										`user_password` = '{$cookiedata['autologinid']}' LIMIT 1";

		$qresult = DBQuery($query);
		if (mysql_num_rows($qresult)) { // nice, password is good
			$qdata = mysql_fetch_assoc($qresult);
			$result['user_id'] = $qdata['user_id'];
			mysql_free_result($qresult);
		};
	};
	// how retrieve data for current user
	$query = "SELECT f.*, permissions.* FROM forum_users f 
						LEFT JOIN site_permissions permissions ON f.user_id = permissions.p_user_id
						WHERE f.user_id='{$result['user_id']}' AND f.user_active = 1 LIMIT 1";
	$qresult = DBQuery($query);
	if (mysql_num_rows($qresult)) {
		$result = mysql_fetch_assoc($qresult);
	};
	mysql_free_result($qresult);
  // correct getted values if needed
	if (empty($result['user_dateformat']) )	{
			$result['user_dateformat'] = $GLOBALS['settings']['defaultdatetime'];
		}	
	
	// Next line try to get ip address of user
	// they use $HTTP_SERVER_VARS['REMOTE_ADDR'], $HTTP_ENV_VARS['REMOTE_ADDR']
	// and if it failed $REMOTE_ADDR, $_SERVER["REMOTE_ADDR"]
  $result['user_ip'] = encode_ip( (!empty($HTTP_SERVER_VARS['REMOTE_ADDR']) ) ? $HTTP_SERVER_VARS['REMOTE_ADDR'] :
																(( !empty($HTTP_ENV_VARS['REMOTE_ADDR'])) ? $HTTP_ENV_VARS['REMOTE_ADDR'] :
																(((!empty($REMOTE_ADDR)) ? $REMOTE_ADDR : $_SERVER["REMOTE_ADDR"] ))) );

	$GLOBALS['L_USER'] = $result;
	return $result;
}; 
Descriptor
phpBB 1.0.0
Сообщения: 6
Стаж: 19 лет 1 месяц

Сообщение Descriptor »

К сожалению наоборот невозможно в моем случае.
Просто у меня на сайте своя авторизация и переделывать ее не хотелось бы, так как на ней много чего завязано, а форум установлен только что и необходимо, чтобы человек, авторизированный на сайте, не был бы вынужден логиниться снова, заходя в форум.
Я понял, что при авторизации на сайте надо послать 2 куки с именами phpbb2mysql_sid и phpbb2mysql_data.
В phpbb2mysql_sid, согласно коду форума записывается md5(uniqid($user_ip));
А в phpbb2mysql_data, если я правильно понял, нужно записать целый массив, преобразованный до строчки. Но что за данные в этом массиве? И как его преобразовывать перед записыванием в куки?
Адекватный дизайн | [url=hhtp://printgraphics.ru]Типография, бесплатный заказ[/url]
[test]
phpBB 1.2.0
Сообщения: 17
Стаж: 19 лет 1 месяц
Контактная информация:

Сообщение [test] »

Descriptor
Нет, послать достаточно только "phpbb2mysql_sid", но тогда надо еще и сессию завести в таблице сессий.
а phpbb2mysql_data это если стояла галочка "Входить при каждом посещении", тогда phpbb сам начинает сессию, если где такое встречает.
и потом сам поставит "phpbb2mysql".
Мне кажется достаточно поставить одну куку.

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

$phpbb2mysql = serialize(array('autologonid' => md5($user_password), 'userid'=> $user_id))
насколько я помню, но могу ошибаться :(
Descriptor
phpBB 1.0.0
Сообщения: 6
Стаж: 19 лет 1 месяц

Сообщение Descriptor »

[test] писал(а):Descriptor
Нет, послать достаточно только "phpbb2mysql_sid", но тогда надо еще и сессию завести в таблице сессий.
Это если на сессиях делать. можнои на сессиях конечно. знать бы - как.
[test] писал(а): а phpbb2mysql_data это если стояла галочка "Входить при каждом посещении", тогда phpbb сам начинает сессию, если где такое встречает.
Вот этого я и хочу.

Добавлено спустя 20 минут 11 секунд:

Ничего не выходит. Вот что я писал:

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

$sql1="SELECT user_id FROM phpbb_users WHERE main_user_id='$now_user_id' LIMIT 1";
$sql2=mysql_query($sql1);
$sql3=mysql_fetch_array($sql2);
$user_id=$sql3['user_id'];
$current_time=time();
$user_ip=$_SERVER['REMOTE_IP'];
$session_id = md5(uniqid($user_ip));
	
$current_time=time();
$sesssiondata = array();
	
$cookiename="phpbb2mysql_sid";
setcookie($cookiename, $session_id, $current_time + 31536000, "/", "", "0");
$sql1="SELECT user_password FROM phpbb_users WHERE main_user_id='$now_user_id'";
$sql2=mysql_query($sql1);
$sql3=mysql_fetch_array($sql2);
$user_password=$sql3['user_password'];
$sessiondata['autologinid']=$user_password;
$cookiename="phpbb2mysql_data";
setcookie($cookiename, serialize($sessiondata), $current_time + 31536000, "/", "", "0");
	
$phpbb2mysql = serialize(array('autologonid' => $user_password, 'userid'=> $user_id));
setcookie("phpbb2mysql", $phpbb2mysql, $current_time + 31536000, "/", "", "0");
[/list]
Адекватный дизайн | [url=hhtp://printgraphics.ru]Типография, бесплатный заказ[/url]
black_cat
phpBB 1.0.0
Сообщения: 1
Стаж: 19 лет 1 месяц

Сообщение black_cat »

Descriptor писал(а): $sql1="SELECT user_id FROM phpbb_users WHERE main_user_id='$now_user_id' LIMIT 1";
$sql2=mysql_query($sql1);
$sql3=mysql_fetch_array($sql2);
$user_id=$sql3['user_id'];
$current_time=time();
$user_ip=$_SERVER['REMOTE_IP'];
$session_id = md5(uniqid($user_ip));

$current_time=time();
$sesssiondata = array();

$cookiename="phpbb2mysql_sid";
setcookie($cookiename, $session_id, $current_time + 31536000, "/", "", "0");
$sql1="SELECT user_password FROM phpbb_users WHERE main_user_id='$now_user_id'";
$sql2=mysql_query($sql1);
$sql3=mysql_fetch_array($sql2);
$user_password=$sql3['user_password'];
$sessiondata['autologinid']=$user_password;
$cookiename="phpbb2mysql_data";
setcookie($cookiename, serialize($sessiondata), $current_time + 31536000, "/", "", "0");

$phpbb2mysql = serialize(array('autologonid' => $user_password, 'userid'=> $user_id));
setcookie("phpbb2mysql", $phpbb2mysql, $current_time + 31536000, "/", "", "0");
Нет такого поля, main_user_id, в таблице phpbb_users, посмотри повнимательнее.
Последний раз редактировалось black_cat 08.02.2005 11:31, всего редактировалось 1 раз.
[test]
phpBB 1.2.0
Сообщения: 17
Стаж: 19 лет 1 месяц
Контактная информация:

Сообщение [test] »

Так между делом (в код не вникал), а я бы не ставил такие куки на время, только на текущий сеанс.

setcookie("phpbb2mysql", $phpbb2mysql, $current_time + 31536000, "/", "", "0")


А так основной вопрос написан выше.
И если ставишь data то _sid неставь, незавел ведь, все равно не совпадет.
Descriptor
phpBB 1.0.0
Сообщения: 6
Стаж: 19 лет 1 месяц

Сообщение Descriptor »

Такое поле есть. Я его добавил и записываю туда то, что мне нужно, чтобы юзер нужный выделялся.
Я послал куки _data, но форум их не распознает все равно.
Адекватный дизайн | [url=hhtp://printgraphics.ru]Типография, бесплатный заказ[/url]
Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Стаж: 19 лет 5 месяцев
Откуда: оттуда
Контактная информация:

Сообщение Егор Наклоняев »

Я послал куки _data, но форум их не распознает все равно.
Все он распознает, просто от шибко резвых в форуме стоит защита, вот она и срабатывает.

Значит так... Тем, кто хочет, чтобы после авторизации на сайте бродить по форуму, однозначно нужно создавать новую сессию и прописывать в куки номер сессии.
Внимательно читаем function session_begin
в файле includes/sessions.php

Тем, кто хочет сделать интеграцию:

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

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_ALBUM);
init_userprefs($userdata);
//
// End session management
//

Sapienty Sat
Descriptor
phpBB 1.0.0
Сообщения: 6
Стаж: 19 лет 1 месяц

Сообщение Descriptor »

То есть вставки этого кода после авторизации на сайте достаточно для заведения сесии? И соответствующая запись в таблице сесиий phpbb появится?

Вроде бы нет. Если так начинать сессию - то начнется сессия _анонимного_ юзера. А нужно - уже залогиненного.
Последний раз редактировалось Descriptor 09.02.2005 22:55, всего редактировалось 1 раз.
Адекватный дизайн | [url=hhtp://printgraphics.ru]Типография, бесплатный заказ[/url]
Antony
phpBB 1.0.0
Сообщения: 3
Стаж: 19 лет 1 месяц

Сообщение Antony »

Это все работает, если убрать все и оставить только HTML код, но у меня есть ещё и подключаемые(методом include) модули от CuteNews.
Так вот что я получаю

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

Warning: htmlspecialchars() expects parameter 1 to be string, object given in C:\server\www\Natali\news\inc\functions.inc.php on line 26
Как бы от этого избавиться??
gled
phpBB 1.0.0
Сообщения: 4
Стаж: 19 лет 1 месяц
Откуда: Орел

Сообщение gled »

Товарищи прошу прошения если вопрос ламерский

После вставки следующего кода

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

define('IN_PHPBB', true); 
$phpbb_root_path = './'; 
include($phpbb_root_path . 'extension.inc'); 
include($phpbb_root_path . 'common.'.$phpEx); 
// 
// Start session management 
// 
$userdata = session_pagestart($user_ip, PAGE_ALBUM); 
init_userprefs($userdata); 
// 
// End session management 
// 
установленные переменны сбрасываются
Михалыч
phpBB 1.2.0
Сообщения: 10
Стаж: 17 лет 11 месяцев
Контактная информация:

Сообщение Михалыч »

Я думаю, может сделать так? Ничего не делать на сайте, а все изменения внести в програмный код форума.

В файле, "формирующем" заголовок страницы, прописать, например если есть кука User (которая ставится, при авторизации на сайте), то отправлять на страницу Входа.
Но, на странице входа прописать, чтобы он брал Логин и Пароль не из формы, а из БД, относительно куки User. Т.е. форма появляться не будет, сервер сам подставит значения Логина и Пароля и отправит пользователя обратно на страницу, но только уже авторизованным.

Как Вы думаете, сработает это? :?
Система АЗК - Система автоматического заполнения квитанций.
SpyzeR
phpBB 1.0.0
Сообщения: 1
Стаж: 17 лет 2 месяца
Контактная информация:

Сообщение SpyzeR »

У меня такая проблемма, поставил форум phpBB-2.0.22, а старый полностью удалил, теперькак сделать так, чтобы при регистрации на сайте юзер регистрировался одновременно на форуме, и чтобы работали Приватные сообщения.
seychas
phpBB 1.0.0
Сообщения: 1
Стаж: 17 лет 2 месяца
Контактная информация:

Сообщение seychas »

Авторизация на сайте давно уже реализована (средствами phpBB ессно). теперь проблема в следующем:
у сайта есть субдомены, меню у сайта и субдоменов одно. как изменить область видимости кук, чтобы юзер, вошедший на основной сайт, в то же время считался "зарегеным" и на субдоменах?
Хорошо там, где мы есть, а мы есть везде!
www.zaural.org - о г.Кургане и его предприятиях
www.ancestor.ru - Предки руси
Закрыто

Вернуться в «Для авторов (phpBB 2.0.x)»