Авторизация, регистрация и logout на самописном портале - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

СвернутьПрикрепленные теги

api

Страница 1 из 1

Авторизация, регистрация и logout на самописном портале

#1 Пользователь не на сайте   Pastuh ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 14
  • Регистрация: 12-Сентябрь 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 01 Март 2016 - 22:33

Здравствуйте, у меня есть IPB 3.4.6 версии на котором я занимался разработкой, но сейчас встала нужда приобрести лицензию и установить IPS 4.

Что мне необходимо:
Есть самописный портал для IPB 3.4.х версии, его нужно подключить к IPS 4.

Я использовал функции из этого топика http://ipbskins.ru/f.../topic6401.html все прекрасно работало, но они полностью не подходят для IPS 4.

Я провел несколько дней в поисках реализации того же на более новой версии, нашел IPS Connect который уже встроенный, и делает в принципе тоже самое, что и эти функции. Но там требуется как то подключать секретный ключ, с этим я вообще не разобрался, на самом деле я так понял, что это для связки отдельных сайтов. Поэтому это не много не тот вариант который мне нужен, меня интересует работа напрямую на том же домене и можно сказать почти в той же директории что и форум.

Так же я нашел в /applications/core/modules/front/system/login.php функции _doLogin и logout которые как раз мне нужны.

Я пробовал подключать их как указано в этой теме: http://ipbskins.ru/f...topic14284.html

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

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

Буду при много благодарен за любую помощь, а так же советы по моей просьбе\проблеме.
0

#2 Пользователь не на сайте   avgaz ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 153
  • Регистрация: 28-Январь 08
  • Репутация: 5
  • IPB version:3.4.x
 

Отправлено 02 Март 2016 - 00:41

Точно уже не помню вроде так у меня работало

require_once('init.php');
\IPS\Dispatcher\Front::i();

//$member = \IPS\Member::loggedIn();

$logout = \IPS\Session::i()->csrfKey;

echo "<a href="/forum/logout/?csrfKey={$logout}">Выход</a>";


ну и в форме входа должно быть поле в этим ключом тоже
1

#3 Пользователь не на сайте   Pastuh ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 14
  • Регистрация: 12-Сентябрь 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 02 Март 2016 - 08:01

Это не совсем то, это использование ссылки самого форума, а не прямая работа с его функцией. Вот например как было сделано на 3.4.6

require_once( FORUM_PATH . 'admin/api/member/api_member_login.php' );
$apiMember = new apiMemberLogin();
$apiMember->init();

	if( $_GET['do'] == 'logout' ) {
		$apiMember->logout();
		header('Location: http://'.$_SERVER['HTTP_HOST'].'/index.php');
		exit;
	}


То есть при вызове http://site.ru/?do=logout я получу полноценный выход с ipb и с портала.
Как видим был вызван класс apiMemberLogin(), и выполнена его функция logout(), которая сама подцепилась к функциям IPB и выполнила все необходимые процедуры. Хотя есть и вариант как написали вы, через ссылку с указанием ключа сессии. Но больше интересует вариант с использованием функции. Потому что например вот авторизация через это:

require_once( FORUM_PATH . 'admin/api/member/api_member_login.php' );
$apiMember = new apiMemberLogin();
$apiMember->init();
	if ($_GET['do'] == 'ips_username') {
		$ips_username = $_POST['ips_username'];
		$ips_password = $_POST['ips_password'];
		login_ipb($ips_username,$ips_password);
	}

	function login_ipb($ips_username,$ips_password) {
		global $apiMember;
		$ret = $apiMember->login( $ips_username, $ips_password );
		$result = $ret[2];
		if (empty($result)) {
			header('Location: http://'.$_SERVER['HTTP_HOST'].'/index.php');
		} else {
			header('Location: http://'.$_SERVER['HTTP_HOST'].'/?go=login&error='.$result);
		}
	}


Как говорится все просто и доступно и на IPB нас не кидает, все происходит на портале. Меня интересует тоже самое но на IPS 4.
0

#4 Пользователь не на сайте   Dmitriy427 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Specialist
  • Сообщений: 574
  • Регистрация: 15-Октябрь 11
  • Репутация: 152
  • Откуда:Россия, Тула
  • IPB version:3.3.x
 

Отправлено 02 Март 2016 - 08:56

Дык, смотрите функцию "_doLogin" в /applications/core/modules/front/system/login.php и в класс \IPS\Login (/system/Login/Login.php), и пишете свою функцию для страницы портала, что мешает-то? Там тоже все доступно и не сложно.

Цитата

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

Вечером попробуем пример сделать, если раньше никто не успеет.
0

#5 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 692
  • Регистрация: 20-Март 09
  • Репутация: 2 262
  • IPB version:3.1.x
 

Отправлено 02 Март 2016 - 10:33

Если это портал для ипб который не имеет отдельной базы пользователей, почему бы не использовать стандартные страницы форума для авторизации и регистрации? Зачем придумывать костыли с апи и писать два раза одни и теже действия?
0

#6 Пользователь не на сайте   Pastuh ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 14
  • Регистрация: 12-Сентябрь 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 02 Март 2016 - 12:38

Планируется добавлять дополнительные пункты и проверки для регистрации например. Саму регистрацию через ИПБ я отключу, ну точнее выпилю вообще эти кнопки. По факту этот портал будет как не часть форума, но и в тоже время нужно использовать именно через портал. Короче замутно. Разработка идет для онлайн игры и там много всяких условий и критериев от партнеров, которые необходимо реализовать, но в тоже время есть необходимость не переписывать функционал ИПБ, а его перенести и дописать.
0

#7 Пользователь не на сайте   Dmitriy427 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Specialist
  • Сообщений: 574
  • Регистрация: 15-Октябрь 11
  • Репутация: 152
  • Откуда:Россия, Тула
  • IPB version:3.3.x
 

Отправлено 02 Март 2016 - 19:46

Вот ваш пример - Вложение  myportal.zip (2,27К)
Количество загрузок: 10
Распаковать в корень, перейти по ссылке http://mysite.moo/myportal/.
2

#8 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 692
  • Регистрация: 20-Март 09
  • Репутация: 2 262
  • IPB version:3.1.x
 

Отправлено 05 Март 2016 - 01:08

/*
 * Authorization
 * @return \IPS\Member|false
 */
function doLogin( $username, $password, $rememberMe=true, $anonymous=false )
{
	$login = new \IPS\Login( \IPS\Http\Url::internal('') );
	$login->forms();
	
	try{
		$member = $login->authenticateStandard(array(
			'auth'     => $username,
			'password' => $password,
		));
	}
	catch( \IPS\Login\Exception $e )
	{
		return false;
	}
	
	if ( $anonymous and !\IPS\Settings::i()->disable_anonymous )
	{
		\IPS\Session::i()->setAnon();
		\IPS\Request::i()->setCookie( 'anon_login', 1 );
	}
	
	\IPS\Session::i()->setMember( $member );
	
	if ( $rememberMe )
	{
		$expire = new \IPS\DateTime;
		$expire->add( new \DateInterval( 'P7D' ) );
		\IPS\Request::i()->setCookie( 'member_id', $member->member_id, $expire );
		\IPS\Request::i()->setCookie( 'pass_hash', $member->member_login_key, $expire );

		if ( $anonymous and !\IPS\Settings::i()->disable_anonymous )
		{
			\IPS\Request::i()->setCookie( 'anon_login', 1, $expire );
		}
	}

	$member->memberSync( 'onLogin', array( \IPS\Login::getDestination() ) );
	
	return $member;
}

/*
 * Logout
 * @return void
 */
function logout()
{
	$redirectUrl = \IPS\Http\Url::internal( '' );
	$member = \IPS\Member::loggedIn();
	
	/* Are we logging out back to an admin user? */
	if( isset( $_SESSION['logged_in_as_key'] ) )
	{
		$key = $_SESSION['logged_in_as_key'];
		unset( \IPS\Data\Store::i()->$key );
		unset( $_SESSION['logged_in_as_key'] );
		unset( $_SESSION['logged_in_from'] );
		
		return;
	}
	
	\IPS\Request::i()->setCookie( 'member_id', NULL );
	\IPS\Request::i()->setCookie( 'pass_hash', NULL );
	\IPS\Request::i()->setCookie( 'anon_login', NULL );

	foreach( \IPS\Request::i()->cookie as $name => $value )
	{
		if( mb_strpos( $name, "ipbforumpass_" ) !== FALSE )
		{
			\IPS\Request::i()->setCookie( $name, NULL );
		}
	}
	
	session_destroy();

	/* Login handler callback */
	foreach ( \IPS\Login::handlers( TRUE ) as $k => $handler )
	{
		try
		{
			$handler->logoutAccount( $member, $redirectUrl );
		}
		catch( \BadMethodCallException $e ) {}
	}

	/* Member sync callback */
	$member->memberSync( 'onLogout', array( $redirectUrl ) );
}

1

#9 Пользователь не на сайте   Pastuh ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 14
  • Регистрация: 12-Сентябрь 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 05 Март 2016 - 18:35

Спасибо, именно то что я искал.
0

#10 Пользователь не на сайте   Pastuh ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 14
  • Регистрация: 12-Сентябрь 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 09 Март 2016 - 19:32

Решил не создавать новую тему а узнать в этой, так как вопрос связан.

Вот я подгружаю часть переменных из IPS:
//\IPS\Dispatcher\Front::i();
\IPS\Dispatcher\Build::i();
$lang = \IPS\Lang::load( \IPS\Lang::defaultLanguage() );
$member = \IPS\Member::loggedIn();
$name = $member->name;
$member_id = $member->member_id;
$photo = $member->photo;
$group_id = $member->member_group_id;
$group_name = $member->groupName;


Все выводится нормально, но когда пытаюсь вывести $group_name, получаю вот такую белеберду - <span style="color:#ff0000">5f89b7d227f657c81a6ade13afb30149</span>.
Как бы я думаю видно, что он поймал группу администратора и подгрузил даже его цвет. Но как бы само название у нас чем то шифруется. При обновление страницы сам код 5f89b7d227f657c81a6ade13afb30149 меняется. Как можно это победить и вывести нормальное название?

На деле испробовал много вариантов. Сейчас стоит вывод вместе с formatName, без него такая же билеберда, только вот уже span и цвет не задается. Уже голову сломал.. В чем может быть проблема?

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

#11 Пользователь не на сайте   Dmitriy427 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Specialist
  • Сообщений: 574
  • Регистрация: 15-Октябрь 11
  • Репутация: 152
  • Откуда:Россия, Тула
  • IPB version:3.3.x
 

Отправлено 09 Март 2016 - 19:37

http://ipbskins.ru/f...html#entry95710

P.S. Но можно и проще:
$g_name = \IPS\Member::loggedIn()->get_groupName();
\IPS\Member::loggedIn()->language()->parseOutputForDisplay( $g_name );
var_dump( $g_name );

1

#12 Пользователь не на сайте   Pastuh ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 14
  • Регистрация: 12-Сентябрь 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 09 Март 2016 - 20:24

Спасибо помогло.
0

#13 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 2 166
  • Регистрация: 26-Октябрь 11
  • Репутация: 814
  • IPB version:I have no IPB
 

Отправлено 10 Март 2016 - 09:11

Просмотреть сообщениеPastuh сказал(а):

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

Видимо не разобрались. В моем коде нет ничего, что было бы связано с группой авторизованного пользователя. Там задача другая была - вывести все имеющиеся на форуме группы. Единственное, на что нужно было обратить внимание
\IPS\Member::loggedIn()->language()->parseOutputForDisplay( $groupsAsString );


Просмотреть сообщениеPastuh сказал(а):

Как можно это победить и вывести нормальное название?
После
$group_name = $member->groupName;
добавить
\IPS\Member::loggedIn()->language()->parseOutputForDisplay( $group_name );

0

Сообщить об этой теме:


Страница 1 из 1


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2016 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна