Уважаемые пользователи!
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. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
vitalekmail
phpBB 1.0.0
Сообщения: 9
Стаж: 8 лет 3 месяца

Как авторизироваться из вне

Сообщение vitalekmail »

Всё пытаюсь сделать авторизацию с сайта. Опыта не маловато знаний тоже. Желание через край. =)

Как я думаю. С сайта послаю POST запрос, в ответ получаю страницу откуда собираю куки. Правильно? Кажется нет потому что у меня не выходит.

Из 'Просмотр HTTP заголовков' копирую удачную авторизацию на форуме. Получаю это:
Удачная аторизация на форуме 

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

http://site.ru/forum/ucp.php?mode=login

POST /forum/ucp.php?mode=login HTTP/1.1
Host: site.ru
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0 FirePHP/0.7.4
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://site.ru/forum/ucp.php?mode=login&sid=28b7cea8972ef79d5daee272026195ad
x-insight: activate
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 168
username=email%40bk.ru&password=parol&redirect=.%2Fucp.php%3Fmode%3Dlogin&sid=28b7cea8972ef79d5daee272026195ad&redirect=index.php&login=%D0%92%D1%85%D0%BE%D0%B4
HTTP/1.1 302 Found
Date: Fri, 05 Feb 2016 19:26:40 GMT
Server: Apache/2.4.17 (Unix) OpenSSL/1.0.1q PHP/5.6.15 mod_perl/2.0.8-dev Perl/v5.16.3
X-Powered-By: PHP/5.6.15
Set-Cookie: phpbb3_b4ume_u=2; expires=Sat, 04-Feb-2017 19:26:41 GMT; path=/; HttpOnly
Set-Cookie: phpbb3_b4ume_k=; expires=Sat, 04-Feb-2017 19:26:41 GMT; path=/; HttpOnly
Set-Cookie: phpbb3_b4ume_sid=f7a536d1eb2517f83e23e194af4366dc; expires=Sat, 04-Feb-2017 19:26:41 GMT; path=/; HttpOnly
Location: http://site.ru/forum/index.php?sid=f7a536d1eb2517f83e23e194af4366dc
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
----------------------------------------------------------
http://site.ru/forum/index.php?sid=f7a536d1eb2517f83e23e194af4366dc

GET /forum/index.php?sid=f7a536d1eb2517f83e23e194af4366dc HTTP/1.1
Host: site.ru
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0 FirePHP/0.7.4
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://site.ru/forum/ucp.php?mode=login&sid=28b7cea8972ef79d5daee272026195ad
Cookie: phpbb3_b4ume_u=2; phpbb3_b4ume_k=; phpbb3_b4ume_sid=f7a536d1eb2517f83e23e194af4366dc
x-insight: activate
Connection: keep-alive

HTTP/1.1 200 OK
Date: Fri, 05 Feb 2016 19:26:41 GMT
Server: Apache/2.4.17 (Unix) OpenSSL/1.0.1q PHP/5.6.15 mod_perl/2.0.8-dev Perl/v5.16.3
X-Powered-By: PHP/5.6.15
Cache-Control: private, no-cache="set-cookie"
Expires: Fri, 05 Feb 2016 19:26:42 GMT
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
----------------------------------------------------------
http://site.ru/forum/cron.php?cron_type=cron.task.core.tidy_sessions

GET /forum/cron.php?cron_type=cron.task.core.tidy_sessions HTTP/1.1
Host: site.ru
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0 FirePHP/0.7.4
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://site.ru/forum/index.php?sid=f7a536d1eb2517f83e23e194af4366dc
Cookie: phpbb3_b4ume_u=2; phpbb3_b4ume_k=; phpbb3_b4ume_sid=f7a536d1eb2517f83e23e194af4366dc
x-insight: activate
Connection: keep-alive

HTTP/1.1 200 OK
Date: Fri, 05 Feb 2016 19:26:42 GMT
Server: Apache/2.4.17 (Unix) OpenSSL/1.0.1q PHP/5.6.15 mod_perl/2.0.8-dev Perl/v5.16.3
X-Powered-By: PHP/5.6.15
Cache-Control: no-cache
Content-Length: 43
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Content-Type: image/gif
----------------------------------------------------------
далее беру https://github.com/Kasheftin/req - Класс для HTTP-запросов через обычный socket
Произвожу небольшие изменения для подстройки POST запроса. Получаю такой запрос:
POST запрос, переменная $r 

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

POST /forum/ucp.php?mode=login HTTP/1.1
Host: site.ru
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0 FirePHP/0.7.4
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Referer: http://site.ru/forum/ucp.php?mode=login
x-insight: activate
Connection: close
Content-Type: application/x-www-form-urlencoded
Cookie: XDEBUG_SESSION=15489; PHPSESSID=ohohpr1nnjaf5bup33uhep2kd0; language=ru; currency=RUB; 
Content-Length: 167

username=email%40bk.ru&password=parol&redirect=%2Fucp.php%3Fmode%3Dlogin&sid=015ae44d6fe34ddfef1786d581183557&redirect=index.php&login=%D0%92%D1%85%D0%BE%D0%B4
он отправляется в следующем коде, где $r - текст POST запроса, $s - как я понимаю ответ.

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

        $s = "";
        if ($fp = fsockopen('www.'.$opts["host"],$opts["port"],$errn,$errstr))
        {
            fputs($fp,$r);
            while (!feof($fp)) {
                $s .= fgets($fp);
            }
        }
В ответе получаю "Вы ввели неверное имя пользователя"
Ответ, переменная $s 

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

HTTP/1.1 200 OK
Server: openresty/1.9.3.1
Date: Sun, 07 Feb 2016 01:12:40 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Vary: Accept-Encoding
X-Powered-By: PHP/5.6.18
Set-Cookie: phpbb3_3fyhd_u=1; expires=Mon, 06-Feb-2017 01:12:40 GMT; path=/; HttpOnly
Set-Cookie: phpbb3_3fyhd_k=; expires=Mon, 06-Feb-2017 01:12:40 GMT; path=/; HttpOnly
Set-Cookie: phpbb3_3fyhd_sid=4d38a8e7b268e98e583d656babaf5133; expires=Mon, 06-Feb-2017 01:12:40 GMT; path=/; HttpOnly
Cache-Control: private, no-cache="set-cookie"
Expires: Sun, 07 Feb 2016 01:12:40 GMT

328d
<!DOCTYPE html>
<html dir="ltr" lang="ru">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />

<title>site.ru форум - Личный раздел - Вход</title>

	<link rel="alternate" type="application/atom+xml" title="Канал - site.ru форум" href="/forum/app.php/feed?sid=4d38a8e7b268e98e583d656babaf5133">			<link rel="alternate" type="application/atom+xml" title="Канал - Новые темы" href="/forum/app.php/feed/topics?sid=4d38a8e7b268e98e583d656babaf5133">				

<!--
	phpBB style name: prosilver
	Based on style:   prosilver (this is the default phpBB3 style)
	Original author:  Tom Beddard ( http://www.subBlue.com/ )
	Modified by:
-->

<link href="./assets/css/font-awesome.min.css?assets_version=3" rel="stylesheet">
<link href="./styles/prosilver/theme/stylesheet.css?assets_version=3" rel="stylesheet">
<link href="./styles/prosilver/theme/ru/stylesheet.css?assets_version=3" rel="stylesheet">



<!--[if lte IE 9]>
	<link href="./styles/prosilver/theme/tweaks.css?assets_version=3" rel="stylesheet">
<![endif]-->





</head>
<body id="phpbb" class="nojs notouch section-ucp ltr ">


<div id="wrap" class="wrap">
	<a id="top" class="top-anchor" accesskey="t"></a>
	<div id="page-header">
		<div class="headerbar" role="banner">
			<div class="inner">

			<div id="site-description" class="site-description">
				<a id="logo" class="logo" href="http://site.ru" title="site.ru"><span class="site_logo"></span></a>
				<h1>site.ru форум</h1>
				<p></p>
				<p class="skiplink"><a href="#start_here">Пропустить</a></p>
			</div>

									<div id="search-box" class="search-box search-header" role="search">
				<form action="./search.php?sid=4d38a8e7b268e98e583d656babaf5133" method="get" id="search">
				<fieldset>
					<input name="keywords" id="keywords" type="search" maxlength="128" title="Ключевые слова" class="inputbox search tiny" size="20" value="" placeholder="Поиск…" />
					<button class="button button-search" type="submit" title="Поиск">
						<i class="icon fa-search fa-fw" aria-hidden="true"></i><span class="sr-only">Поиск</span>
					</button>
					<a href="./search.php?sid=4d38a8e7b268e98e583d656babaf5133" class="button button-search-end" title="Расширенный поиск">
						<i class="icon fa-cog fa-fw" aria-hidden="true"></i><span class="sr-only">Расширенный поиск</span>
					</a>
					<input type="hidden" name="sid" value="4d38a8e7b268e98e583d656babaf5133" />

				</fieldset>
				</form>
			</div>
			
			</div>
		</div>
				<div class="navbar" role="navigation">
	<div class="inner">

	<ul id="nav-main" class="nav-main linklist" role="menubar">

		<li id="quick-links" class="quick-links dropdown-container responsive-menu" data-skip-responsive="true">
			<a href="#" class="dropdown-trigger">
				<i class="icon fa-bars fa-fw" aria-hidden="true"></i><span>Ссылки</span>
			</a>
			<div class="dropdown">
				<div class="pointer"><div class="pointer-inner"></div></div>
				<ul class="dropdown-contents" role="menu">
					
											<li class="separator"></li>
																									<li>
								<a href="./search.php?search_id=unanswered&sid=4d38a8e7b268e98e583d656babaf5133" role="menuitem">
									<i class="icon fa-file-o fa-fw icon-gray" aria-hidden="true"></i><span>Сообщения без ответов</span>
								</a>
							</li>
							<li>
								<a href="./search.php?search_id=active_topics&sid=4d38a8e7b268e98e583d656babaf5133" role="menuitem">
									<i class="icon fa-file-o fa-fw icon-blue" aria-hidden="true"></i><span>Активные темы</span>
								</a>
							</li>
							<li class="separator"></li>
							<li>
								<a href="./search.php?sid=4d38a8e7b268e98e583d656babaf5133" role="menuitem">
									<i class="icon fa-search fa-fw" aria-hidden="true"></i><span>Поиск</span>
								</a>
							</li>
					
											<li class="separator"></li>
																			<li>
								<a href="./memberlist.php?mode=team&sid=4d38a8e7b268e98e583d656babaf5133" role="menuitem">
									<i class="icon fa-shield fa-fw" aria-hidden="true"></i><span>Наша команда</span>
								</a>
							</li>
																<li class="separator"></li>

									</ul>
			</div>
		</li>

				<li data-skip-responsive="true">
			<a href="/forum/app.php/help/faq?sid=4d38a8e7b268e98e583d656babaf5133" rel="help" title="Часто задаваемые вопросы" role="menuitem">
				<i class="icon fa-question-circle fa-fw" aria-hidden="true"></i><span>FAQ</span>
			</a>
		</li>
						
			<li class="rightside"  data-skip-responsive="true">
			<a href="./ucp.php?mode=login&sid=4d38a8e7b268e98e583d656babaf5133" title="Вход" accesskey="x" role="menuitem">
				<i class="icon fa-power-off fa-fw" aria-hidden="true"></i><span>Вход</span>
			</a>
		</li>
					<li class="rightside" data-skip-responsive="true">
				<a href="./ucp.php?mode=register&sid=4d38a8e7b268e98e583d656babaf5133" role="menuitem">
					<i class="icon fa-pencil-square-o  fa-fw" aria-hidden="true"></i><span>Регистрация</span>
				</a>
			</li>
						</ul>

	<ul id="nav-breadcrumbs" class="nav-breadcrumbs linklist navlinks" role="menubar">
						<li class="breadcrumbs">
							<span class="crumb"  itemtype="http://data-vocabulary.org/Breadcrumb" itemscope=""><a href="http://site.ru" data-navbar-reference="home"><i class="icon fa-home fa-fw" aria-hidden="true"></i><span>site.ru</span></a></span>
										<span class="crumb"  itemtype="http://data-vocabulary.org/Breadcrumb" itemscope=""><a href="./index.php?sid=4d38a8e7b268e98e583d656babaf5133" accesskey="h" data-navbar-reference="index"><span>Список форумов</span></a></span>

								</li>
		
					<li class="rightside responsive-search">
				<a href="./search.php?sid=4d38a8e7b268e98e583d656babaf5133" title="Параметры расширенного поиска" role="menuitem">
					<i class="icon fa-search fa-fw" aria-hidden="true"></i><span class="sr-only">Поиск</span>
				</a>
			</li>
			</ul>

	</div>
</div>
	</div>

	
	<a id="start_here" class="anchor"></a>
	<div id="page-body" class="page-body" role="main">
		
		
<form action="./ucp.php?mode=login&sid=4d38a8e7b268e98e583d656babaf5133" method="post" id="login" data-focus="username">
<div class="panel">
	<div class="inner">

	<div class="content">
		<h2 class="login-title">Вход</h2>

		<fieldset class="fields1">
		<div class="error">Вы ввели неверное имя пользователя. Проверьте его и попробуйте ввести ещё раз. Если проблема со входом останется, то сообщите об этом <a href="./memberlist.php?mode=contactadmin&sid=4d38a8e7b268e98e583d656babaf5133">администратору</a>.</div>		<dl>
			<dt><label for="username">Имя пользователя:</label></dt>
			<dd><input type="text" tabindex="1" name="username" id="username" size="25" value="" class="inputbox autowidth" /></dd>
		</dl>
		<dl>
			<dt><label for="password">Пароль:</label></dt>
			<dd><input type="password" tabindex="2" id="password" name="password" size="25" class="inputbox autowidth" autocomplete="off" /></dd>
					</dl>
						<dl>
			<dd><label for="autologin"><input type="checkbox" name="autologin" id="autologin" tabindex="4" /> Запомнить меня</label></dd>			<dd><label for="viewonline"><input type="checkbox" name="viewonline" id="viewonline" tabindex="5" /> Скрыть моё пребывание на конференции в этот раз</label></dd>
		</dl>
		
		<input type="hidden" name="redirect" value="./ucp.php?mode=login&sid=4d38a8e7b268e98e583d656babaf5133" />

		<dl>
			<dt>&nbsp;</dt>
			<dd><input type="hidden" name="sid" value="4d38a8e7b268e98e583d656babaf5133" />
<input type="hidden" name="redirect" value="index.php" />
<input type="submit" name="login" tabindex="6" value="Вход" class="button1" /></dd>
		</dl>
		</fieldset>
	</div>

		</div>
</div>


	<div class="panel">
		<div class="inner">

		<div class="content">
			<h3>Регистрация</h3>
			<p>Для входа на конференцию вы должны быть зарегистрированы. Регистрация занимает всего несколько минут, но предоставляет вам более широкие возможности. Администратором конференции могут быть установлены также дополнительные привилегии для зарегистрированных пользователей. Прежде чем зарегистрироваться, вам следует ознакомиться с правилами и политикой, принятыми на конференции. Помните, что ваше присутствие на форумах означает согласие со всеми правилами.</p>
			<p><strong><a href="./ucp.php?mode=terms&sid=4d38a8e7b268e98e583d656babaf5133">Общие правила</a> | <a href="./ucp.php?mode=privacy&sid=4d38a8e7b268e98e583d656babaf5133">Соглашение о конфиденциальности</a></strong></p>
			<hr class="dashed" />
			<p><a href="./ucp.php?mode=register&sid=4d38a8e7b268e98e583d656babaf5133" class="button2">Регистрация</a></p>
		</div>

		</div>
	</div>

</form>

			</div>


<div id="page-footer" class="page-footer" role="contentinfo">
	<div class="navbar" role="navigation">
	<div class="inner">

	<ul id="nav-footer" class="nav-footer linklist" role="menubar">
		<li class="breadcrumbs">
							<span class="crumb">
					<a href="http://site.ru" data-navbar-reference="home">
						<i class="icon fa-home fa-fw" aria-hidden="true"></i><span>site.ru</span>
					</a>
				</span>
									<span class="crumb">
				<a href="./index.php?sid=4d38a8e7b268e98e583d656babaf5133" data-navbar-reference="index">
					<span>Список форумов</span>
				</a>
			</span>
					</li>
		
				<li class="rightside">Часовой пояс: <span title="UTC">UTC</span></li>
							<li class="rightside">
				<a href="./ucp.php?mode=delete_cookies&sid=4d38a8e7b268e98e583d656babaf5133" data-ajax="true" data-refresh="true" role="menuitem">
					<i class="icon fa-trash fa-fw" aria-hidden="true"></i><span>Удалить cookies конференции</span>
				</a>
			</li>
												<li class="rightside" data-last-responsive="true">
				<a href="./memberlist.php?mode=team&sid=4d38a8e7b268e98e583d656babaf5133" role="menuitem">
					<i class="icon fa-shield fa-fw" aria-hidden="true"></i><span>Наша команда</span>
				</a>
			</li>
							</ul>

	</div>
</div>

	<div class="copyright">
				Создано на основе <a href="https://www.phpbb.com/">phpBB</a>&reg; Forum Software &copy; phpBB Limited
		<br /><a href='http://www.phpbbguru.net/'>Русская поддержка phpBB</a>							</div>

	<div id="darkenwrapper" class="darkenwrapper" data-ajax-error-title="Ошибка AJAX" data-ajax-error-text="При обработке запроса произошла ошибка." data-ajax-error-text-abort="Запрос прерван пользователем." data-ajax-error-text-timeout="Время запроса истекло; повторите попытку." data-ajax-error-text-parsererror="При выполнении запроса возникла непредвиденная ошибка, и сервер вернул неверный ответ.">
		<div id="darken" class="darken">&nbsp;</div>
	</div>

	<div id="phpbb_alert" class="phpbb_alert" data-l-err="Ошибка" data-l-timeout-processing-req="Время выполнения запроса истекло.">
		<a href="#" class="alert_close">
			<i class="icon fa-times-circle fa-fw" aria-hidden="true"></i>
		</a>
		<h3 class="alert_title">&nbsp;</h3><p class="alert_text"></p>
	</div>
	<div id="phpbb_confirm" class="phpbb_alert">
		<a href="#" class="alert_close">
			<i class="icon fa-times-circle fa-fw" aria-hidden="true"></i>
		</a>
		<div class="alert_text"></div>
	</div>
</div>

</div>

<div>
	<a id="bottom" class="anchor" accesskey="z"></a>
	<img src="./cron.php?cron_type=cron.task.core.tidy_sessions&sid=4d38a8e7b268e98e583d656babaf5133" width="1" height="1" alt="cron" /></div>

<script type="text/javascript" src="./assets/javascript/jquery.min.js?assets_version=3"></script>
<script type="text/javascript" src="./assets/javascript/core.js?assets_version=3"></script>


<script type="text/javascript" src="./styles/prosilver/template/forum_fn.js?assets_version=3"></script>

<script type="text/javascript" src="./styles/prosilver/template/ajax.js?assets_version=3"></script>




</body>
</html>

0


Какую роль играет \r\n\r\n перед последней строчкой в запросе. Понятно что это два переноса строки, но как это обрабатывает сервер?
Почему если я убираю \r\n\r\n перед последней строчкой в $r, то выполнение $s .= fgets($fp); возвращает пустую строку?
Помогите в этом разобраться.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16378
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1746 раз

Re: Как авторизироваться из вне

Сообщение rxu »

У вас форум и сайт на разных серверах, или как?
Если в одной папке, то при наличии опыта, наверное, сможете разобраться и адаптировать метод от 3.0 отсюда [FAQ RC] Интеграция входа на конференцию с сайтом
Изображение
vitalekmail
phpBB 1.0.0
Сообщения: 9
Стаж: 8 лет 3 месяца

Re: Как авторизироваться из вне

Сообщение vitalekmail »

Сайт и форум на одном сервере
При выполнении вашего скрипта у меня почему то пустые значения переменных здесь

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

// 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('username', '', true);
	$password = request_var('password', '', true);
	$autologin	= (!empty($_POST['autologin'])) ? true : false;

	$login = $auth->login($username, $password, $autologin);
}
Эти значения из формы берутся?

Авторизация заработала! =)
Вот так...

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

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

	$login = $auth->login($username, $password, $autologin);
}
Последний раз редактировалось vitalekmail 07.02.2016 17:55, всего редактировалось 1 раз.
Anvar
Former team member
Сообщения: 1965
Стаж: 14 лет 1 месяц
Благодарил (а): 57 раз
Поблагодарили: 625 раз

Re: Как авторизироваться из вне

Сообщение Anvar »

Да, форма передаёт данные в POST. Текстовые поля с username и password, ещё чекбокс для автологина.
Не пишите вопросы лично, если можете задать их на форуме!
Спецзаказы не интересуют!
vitalekmail
phpBB 1.0.0
Сообщения: 9
Стаж: 8 лет 3 месяца

Re: Как авторизироваться из вне

Сообщение vitalekmail »

А как интегрировать в сайт? Появляются конфликты при подключении

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

include ($phpbb_root_path . 'common.' . $phpEx);
Fatal error: Cannot redeclare utf8_strrpos() (previously declared in /system/helper/utf8.php:13) in /forum/includes/utf/utf_tools.php on line 59

т.е. эта функция уже есть на сайте я так понимаю.
Как правильно разрешить такие конфликты?
antoha
phpBB 1.0.0
Сообщения: 4
Стаж: 8 лет 3 месяца
Благодарил (а): 1 раз

Авторизация с phpbb

Сообщение antoha »

На сайте есть общая авторизация с форумом phpbb, тоесть авторизовавшись на сайте пользователь автоматически авторизуется и на форуме. С версией phpbb 3.0.14 все это дело работает, а с последней версией нет. Подскажите пожалуйста, что не так, где ошибка, куда копать и как исправить?

Код:

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

<?php
define('IN_PHPBB', true);
$db_pptkey = 'phpbb';
$db_hash = $db_pptkey;
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
require($phpbb_root_path . 'common.' . $phpEx);
require($phpbb_root_path . 'includes/functions_user.' . $phpEx);

function InitGP($keys,$method=null,$cvtype=1){
	!is_array($keys) && $keys = array($keys);
	foreach ($keys as $key) {
		$GLOBALS[$key] = NULL;
		if ($method != 'P' && isset($_GET[$key])) {
			$GLOBALS[$key] = $_GET[$key];
		} elseif ($method != 'G' && isset($_POST[$key])) {
			$GLOBALS[$key] = $_POST[$key];
		}
		if (isset($GLOBALS[$key]) && !empty($cvtype)) {
			$GLOBALS[$key] = Char_cv($GLOBALS[$key],$cvtype==2,true);
		}
	}
}

function Char_cv($mixed,$isint=false,$istrim=false) {
	if (is_array($mixed)) {
		foreach ($mixed as $key => $value) {
			$mixed[$key] = Char_cv($value,$isint,$istrim);
		}
	} elseif ($isint) {
		$mixed = (int)$mixed;
	} elseif (!is_numeric($mixed) && ($istrim ? $mixed = trim($mixed) : $mixed)) {
		$mixed = str_replace(array("\0","%00","\r"),'',$mixed);
		$mixed = preg_replace(
			array('/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]/','/&(?!(#[0-9]+|[a-z]+);)/is'),
			array('','&'),
			$mixed
		);
		$mixed = str_replace(array("%3C",'<'),'<',$mixed);
		$mixed = str_replace(array("%3E",'>'),'>',$mixed);
		$mixed = str_replace(array('"',"'","\t",'  '),array('"',''','    ','&nbsp;&nbsp;'),$mixed);
	}
	return $mixed;
}

function StrCode($string,$action='ENCODE'){
	$action != 'ENCODE' && $string = base64_decode($string);
	$code = '';
	$key  = substr(md5($_SERVER['HTTP_USER_AGENT'].$GLOBALS['db_hash']),8,18);
	$keylen = strlen($key); $strlen = strlen($string);
	for ($i=0;$i<$strlen;$i++) {
		$k		= $i % $keylen;
		$code  .= $string[$i] ^ $key[$k];
	}
	return ($action!='DECODE' ? base64_encode($code) : $code);
}

InitGP(array('action','forward','verify'));
InitGP(array('userdb'),'GP',0);

if(md5($action.$userdb.$forward.$db_pptkey) != $verify){
	trigger_error('Passport key error');
}
	
parse_str(StrCode($userdb,'DECODE'),$userdb);

if($action=='login'){
	$userdb = Char_cv($userdb);
	$user->session_begin();
	if(!$userdb['time'] || !$userdb['username'] || !$userdb['password']){
		trigger_error('Passport data error');
	}
	if($timestamp-$userdb['time']>3600){
		trigger_error('Passport error');
	}
	$result = $db->sql_query("SELECT user_id, username, user_email, user_password
			FROM " . USERS_TABLE . "
			WHERE username_clean = '" . $db->sql_escape(utf8_clean_string($userdb['username'])) . "'");
	$rt = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);
	if($rt){
		$sql = '';
		if($rt['user_email']!=$userdb['email']) { $sql .= "user_email = '{$userdb['email']}'"; }
		$pw = phpbb_hash($userdb['password']);
		if($rt['user_password']!=$pw) $sql .= $sql ? ", user_password = '{$pw}'" : "user_password = '{$pw}'";
		if ($sql) 	$db->sql_query("UPDATE " . USERS_TABLE . " SET ".$sql." WHERE user_id = {$rt['user_id']}");
		$username = $userdb['username'];
		$password = $userdb['password'];
		$user_id = $rt['user_id'];
	} else{
		$username = $userdb['username'];
		$password = $userdb['password'];
		$group_name = 'REGISTERED';
		$is_dst = $config['board_dst'];
		$timezone = $config['board_timezone'];
		$user_type = USER_NORMAL;
		$sql = 'SELECT group_id
				FROM ' . GROUPS_TABLE . "
				WHERE group_name = '" . $db->sql_escape($group_name) . "'
				AND group_type = " . GROUP_SPECIAL;
		$result = $db->sql_query($sql);
		$row = $db->sql_fetchrow($result);
		$db->sql_freeresult($result);
		$group_id = $row ? $row['group_id'] : 2;
		$reg = array(
			'username'				=> $username,
			'user_password'			=> phpbb_hash($password),
			'user_email'			=> $userdb['email'],
			'group_id'				=> (int) $group_id,
			'user_timezone'			=> request_var('tz', (float) $timezone),
			'user_dst'				=> $is_dst,
			'user_lang'				=> basename(request_var('lang', $user->lang_name)),
			'user_type'				=> $user_type,
			'user_actkey'			=> '',
			'user_ip'				=> $user->ip,
			'user_regdate'			=> time(),
			'user_inactive_reason'	=> 0,
			'user_inactive_time'	=> 0,
		);
		$user_id = user_add($reg);
	}
	$result = $auth->login($username, $password);
	redirect($forward);
} elseif($action=='quit'){
	$user->session_kill();
	$user->session_begin();
	redirect($forward);
}
?>
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 10 лет
Благодарил (а): 41 раз
Поблагодарили: 831 раз

Re: Как авторизироваться из вне

Сообщение LavIgor »

Ну, как минимум, в phpBB 3.1 отсутствует столбец 'user_dst'.
Потом, если не работает, то каков результат выполнения скрипта? Ведь могут быть отображены какие-либо ошибки (в том числе в логах).
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 10 лет
Благодарил (а): 41 раз
Поблагодарили: 831 раз

Re: Как авторизироваться из вне

Сообщение LavIgor »

vitalekmail писал(а): Как правильно разрешить такие конфликты?
Подключать скрипты сайта после скриптов phpBB и проверять в них, объявлены ли данные функции ранее, с помощью function_exists.
antoha
phpBB 1.0.0
Сообщения: 4
Стаж: 8 лет 3 месяца
Благодарил (а): 1 раз

Re: Как авторизироваться из вне

Сообщение antoha »

LavIgor писал(а): Ну, как минимум, в phpBB 3.1 отсутствует столбец 'user_dst'.
Потом, если не работает, то каков результат выполнения скрипта? Ведь могут быть отображены какие-либо ошибки (в том числе в логах).
Ошибка "Passport key error",
а что теперь нужно вставить вместо user_dst? В программировании не силен...
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 10 лет
Благодарил (а): 41 раз
Поблагодарили: 831 раз

Re: Как авторизироваться из вне

Сообщение LavIgor »

antoha писал(а): В программировании не силен...
А как же этот скрипт?
Судя по всему, он был написан для более древних версий PHP.

Я бы отказался от весьма сомнительных функций (комментарии к которым в коде вообще отсутствуют) в начале скрипта, но суть не в этом.

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

В идеале нужно (очень нужно) написать другой скрипт, но работоспособность на текущий момент можно проверить добавлением строки $request->enable_super_globals(); сразу перед сомнительными функциями (function InitGP...).
antoha
phpBB 1.0.0
Сообщения: 4
Стаж: 8 лет 3 месяца
Благодарил (а): 1 раз

Re: Как авторизироваться из вне

Сообщение antoha »

LavIgor писал(а): добавлением строки $request->enable_super_globals();
Добавил-ничего не изменилось.
Можете за денежку исправить/переписать данный файл под новую версию форума?
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 10 лет
Благодарил (а): 41 раз
Поблагодарили: 831 раз

Re: Как авторизироваться из вне

Сообщение LavIgor »

antoha, за денежку - это в Рекрутинг (или в ЛС), но для этого у разработчика должно быть свободное время.
Могу предложить сравнить получаемые значения переменных $action.$userdb.$forward.$db_pptkey и $verify на версиях phpBB 3.0 и 3.1, чтобы понять, какая из них отличается.
Судя по скрипту, он не единственный отвечает за авторизацию на Вашем ресурсе.
Sergiocharm
phpBB 2.0.7
Сообщения: 593
Стаж: 13 лет 7 месяцев
Благодарил (а): 37 раз
Поблагодарили: 4 раза

Re: Как авторизироваться из вне

Сообщение Sergiocharm »

antoha, как вы организовали авторизацию на сайте и форуме? У меня вордпресс и phpbb вашим способом получится авторизовываться из любого места и писать комментарии к статьям вордпресс с аккаунта phpbb?
antoha
phpBB 1.0.0
Сообщения: 4
Стаж: 8 лет 3 месяца
Благодарил (а): 1 раз

Re: Как авторизироваться из вне

Сообщение antoha »

Sergiocharm писал(а): У меня вордпресс и phpbb вашим способом получится авторизовываться из любого места и писать комментарии к статьям вордпресс с аккаунта phpbb?
Нет, это из другой серии, да и не программист я, самому делали когда-то.
vitalekmail
phpBB 1.0.0
Сообщения: 9
Стаж: 8 лет 3 месяца

Re: Как авторизироваться из вне

Сообщение vitalekmail »

LavIgor писал(а):
vitalekmail писал(а): Как правильно разрешить такие конфликты?
Подключать скрипты сайта после скриптов phpBB и проверять в них, объявлены ли данные функции ранее, с помощью function_exists.
а если функции отличаются? А они отличаются к сожалению...

Я всё таки попробую ещё поэксперементировать с первоночальным способом. У меня уже получается получить страницу в скрипте где пользователь авторизирован, но открывая в браузере форум опять обламываюсь(((

Похоже что куки не правильно устанавились...

И всё же спрошу ради полезного знания... Когда пользователь авторизируется, что и где отмечается в базе? Можно ли сделать авторизацию напрямую работая с базой данных?

Вернуться в «Для разработчиков»