Skip to content

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

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

Featured Replies

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

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

  • Author

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

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

 

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

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

  • Author

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

 

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

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

  • Author

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

 

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

 

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

 

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

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

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

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

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

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

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

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

@siv1987,

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

Вот как это была раньше. Интеграция с форумом 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;
				}
			}
		}
	}
}
}

Edited by udagon

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

  • Author

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

Edited by udagon

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.