Jump to content

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


Recommended Posts

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

 

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

 

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

 

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

 

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

Link to comment
Share on other sites

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

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

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

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

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

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

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

Link to comment
Share on other sites

@siv1987,

Нужно переписать скрипт авторизации на сайте под новую версию форума.
Думаю, для начала достаточно взглянуть на код :)
Link to comment
Share on other sites

Вот как это была раньше. Интеграция с форумом 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
Link to comment
Share on other sites

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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...