Перейти к содержимому
Русский язык для Invision Community 5

Внешняя авторизация для ipb 3.4.7

Добрый день. Ищу специалиста по внешней авторизации для ipb 3.4.7. Нужно переписать скрипт авторизации на сайте под новую версию форума. Предложения в ЛС.

Рекомендованные сообщения

Движок сайта?

На сайте у вас стоит ссылка на вход форума.

  • Автор

Движок сайта?

На сайте у вас стоит ссылка на вход форума.

 

Самописный. Да.

Так какая авторизация у вас используется на сайте если ссылка ведет на авторизацию форума? Вы хотите использовать авторизацию на форуме через внешний модуль авторизации с сайта?

  • Автор

Так какая авторизация у вас используется на сайте если ссылка ведет на авторизацию форума? Вы хотите использовать авторизацию на форуме через внешний модуль авторизации с сайта?

 

Да. Чтобы можно было авторизироваться как на сайте так и на форуме. Аналогично выходить.

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

  • Автор

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

 

Что-то мы плохо друг друга понимаем )

 

Нет. Мне не нужна двухсторонняя авторизация. Мне нужно чтобы можно было авторизироваться на сайте без потребности заходить на форум. База юзеров одна - на форуме.

 

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

Что-то мы плохо друг друга понимаем

Внешняя авторизация для ipb

Мне нужно чтобы можно было авторизироваться на сайте без потребности заходить на форум. База юзеров одна - на форуме.

А причем тогда внешняя авторизация ипб?

В этом и проблема, что вы уже решили, что вам нужна внешняя авторизация для ipb, при этом не понимаете что это такое и как она работает. Да еще оказывается что не для форума, а для сайта.

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

Вам следует описать подробнее техническое задание, потому что с названием темы вы немного не угадали.

@siv1987,

Нужно переписать скрипт авторизации на сайте под новую версию форума.
Думаю, для начала достаточно взглянуть на код :)
  • Автор

Вот как это была раньше. Интеграция с форумом 2.3.6

 

Вывод формы на сайте:

 

<!-- Authorization -->
<script type="text/javascript">
function focus_username( e )
{
if ( e.value == "Имя пользователя" )
{
	e.value = '';
	return false;
}
}
function focus_password( e )
{
if ( e.value == "------" )
{
	e.value = '';
	return false;
}
}
</script>
<a name="login"></a>
<?php if( $is_login == FALSE ) { ?>
<form action="http://gta.com.ua/forum2/index.php" method="post">
<input type="hidden" name="act" value="Login" />
<input type="hidden" name="CODE" value="01" />
<input type="hidden" name="referer" value="<?=$my_url?>" />
<input type="hidden" name="CookieDate" value="1" />


		<div style="padding-bottom:5px;"><input type="text" name="UserName" value="Имя пользователя" onFocus="focus_username( this );" /></div>
		<div style="padding-bottom:5px;"><input type="password" name="PassWord" value="------"  onFocus="focus_password( this );" /></div>
		<div><input type='submit' value='Вход' class='button'></div>
	<div style="padding-top:6px;"><a target="_blank" class="login" href="http://gta.com.ua/forum2/index.php?act=Reg&CODE=10">Забыл пароль?</a></div>
	<div style="padding-top:3px;"><a target="_blank" class="login" href="http://gta.com.ua/forum2/index.php?act=reg"><b>Регистрация</b></a></div>


</form>
<?php } else { ?>
<a  class="login" href="/forum2/index.php?showuser=<?=$user_id?>"><b><?=$login?></a></b><br>
<?php if( $avatar_url != '' ) { ?>
<div style="text-align:center;"><a href="/forum2/index.php?showuser=<?=$user_id?>"><img src="<?=$avatar_url?>" border=0 /></a></div>
<?php } ?>

Постов: <b><?=$member_data['posts']?></b><br />
Поинтов: <b><?=$member_data['points']?></b> (<a href="http://gta.com.ua/forum2/index.php?showtopic=3621" title="Для чего нужны поинты">?</a>)<br />
<?php if( $member_data['bday_month'] > 0 && $member_data['bday_day'] > 0 && $member_data['bday_year'] > 0 ) {?>
<?php } ?>
Спасибо сказали: <b><?=$member_data['thanks_point']?></b> раз(а)

<a class="readmore" href="/forum2/index.php?act=Login&CODE=03&k=<?=$ipb_md5_check?>&return=<?=$my_url?>">Выйти</a>

<?php } ?>

 

 

А это инклюдиться на всех страницах:

 

// Проверка авторизации на форуме
$is_login = FALSE;
$self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : @getenv('PHP_SELF');
$self = rtrim( dirname($self), '/\\' );
$my_url  = str_replace( $self, '',  $_SERVER['REQUEST_URI'] );
$my_url  = substr( $my_url, 1 );
$my_url  = 'http://gta.com.ua/' . htmlspecialchars( $my_url );
$forum_link = mysql_connect( 'localhost', 'user', '******' );
mysql_select_db( 'gtacom_forum2', $forum_link );
if( isset( $_COOKIE['forum2member_id'] ) && isset( $_COOKIE['forum2pass_hash'] ) && isset( $_COOKIE['forum2session_id'] ) ) {
$id         = intval( $_COOKIE['forum2member_id'] );
$session_id = preg_replace( "/([^a-zA-Z0-9])/", "", $_COOKIE['forum2session_id'] );
$hash       = preg_replace( "/([^a-zA-Z0-9])/", "", $_COOKIE['forum2pass_hash'] );
if( $session_id && $hash && $id > 0 ) {
	$r = mysql_query( "SELECT member_login_key, email, ibf_members.*, ibf_member_extra.* FROM ibf_members_converge, ibf_members, ibf_member_extra WHERE converge_id = '{$id}' AND member_login_key = '{$hash}' AND converge_id = ibf_members.id AND converge_id = ibf_member_extra.id LIMIT 1", $forum_link );
	if( mysql_num_rows( $r ) == 1 ) {
		$member_data = mysql_fetch_array( $r );

		$ses_r = mysql_query( "SELECT member_id FROM ibf_sessions WHERE id = '{$session_id}' AND ip_address = '{$_SERVER['REMOTE_ADDR']}'", $forum_link );
		if( mysql_num_rows( $ses_r ) == 1 || mysql_num_rows( $ses_r ) == 0 ) {
			$ses = @mysql_fetch_array( $ses_r );
			if( $ses['member_id'] == $id || mysql_num_rows( $ses_r ) == 0 ) {
				$is_login       = TRUE;
				$user_id        = $id;
				$login          = $member_data['members_display_name'];
				$avatar_url     = $member_data['avatar_location'];
				$member_data['age'] = date( "Y" ) - $member_data['bday_year'] - $member_data['bday_month'] / 12 - $member_data['bday_day'] / 360;
				$member_data['age'] = is_int( $member_data ) ? $member_data['age'] : intval( $member_data['age'] ) + 1;
				$ipb_md5_check  = md5( $member_data['email'].'&'.$member_data['member_login_key'].'&'.$member_data['joined'] );
				if( substr( $avatar_url, 0, strlen( 'http://' ) ) != 'http://' ) {
					$avatar_url = '/forum2/uploads/' . $avatar_url;
				}
			}
		}
	}
}
}

Изменено пользователем udagon

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

  • Автор

Сможете помочь за адекватную оплату?

Изменено пользователем udagon

Создайте аккаунт или войдите в него для комментирования

Важная информация

При использовании данного сайта, вы согласаетесь с Условия использования и Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим..

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.