Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

Авторизация через Steam 3.4.8

Здравствуйте.

Прошу помощи в исправлении хука IP.Board-Steam-Authentication-Method

Гит хаб

https://github.com/Lavoaster/IP.Board-Steam-Authentication-Method/tree/IPB34

Суть в том, что около месяца назад, видимо стим что то поменял в своем апи, и хук перестал работать.

При авторизации, и разрешении передачи данных на сайте стима, ничего не происходит.

То есть, при возвращении с сайта, авторизация не происходит, а просто обновляется страница.

 

Или хотя бы

В архиве есть все файлы хука для разработчика, может можно как то "отладить" ? Посмотреть, какие данные передает стим хуку, для того чтобы сравнить с данными, которые должен получать хук

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

/admin/sources/loginauth/steam/lib/steam_openid.php

 

   public static function validate()
   {
       // Start off with some basic params
       $params = array(
           'openid.assoc_handle' => $_GET['openid_assoc_handle'],
           'openid.signed' => $_GET['openid_signed'],
           'openid.sig' => $_GET['openid_sig'],
           'openid.ns' => 'http://specs.openid.net/auth/2.0',
       );

       // Get all the params that were sent back and resend them for validation
       $signed = explode(',', $_GET['openid_signed']);
       foreach ($signed as $item) {
           $val = $_GET['openid_' . str_replace('.', '_', $item)];
           $params['openid.' . $item] = get_magic_quotes_gpc() ? stripslashes($val) : $val;
       }

       // Finally, add the all important mode. 
       $params['openid.mode'] = 'check_authentication';

       //why do we do this? cause file_get_contents to a url goes left in many server configs... IPS is sturdier
       $classToLoad = IPSLib::loadLibrary(IPS_KERNEL_PATH . '/classFileManagement.php', 'classFileManagement');
       $classFileManagement = new $classToLoad;
       $result = $classFileManagement->postFileContents(self::STEAM_LOGIN, $params);
       //also... i could swear i commited this fork.

       // Validate wheather it's true and if we have a good ID
       preg_match("#^http://steamcommunity.com/openid/id/([0-9]{17,25})#", $_GET['openid_claimed_id'], $matches);
       $steamID64 = is_numeric($matches[1]) ? $matches[1] : 0;

       // Return our final value
       return preg_match("#is_valid\s*:\s*true#i", $result) == 1 ? $steamID64 : false;
   }

Заменить на

 

   public static function validate()
   {
	// Start off with some basic params
	$params = array(
		'openid.signed' => $_GET['openid_signed'],
		'openid.sig' => str_replace(' ', '+', $_GET['openid_sig']),
		'openid.ns' => 'http://specs.openid.net/auth/2.0',
	);

	foreach ($params as $key => &$value) {
		$value = urldecode($value);
	}

	// Get all the params that were sent back and resend them for validation
	$signed = explode(',', urldecode($_GET['openid_signed']));
	foreach ($signed as $item) {
		$val = $_GET['openid_' . str_replace('.', '_', $item)];

		if ($item !== 'response_nonce' || strpos($val, '%') !== false) {
			$val = urldecode($val);
		}

		$params['openid.' . $item] = get_magic_quotes_gpc() ? stripslashes($val) : $val;
	}

	// Finally, add the all important mode.
	$params['openid.mode'] = 'check_authentication';

	// Validate whether it's true and if we have a good ID
	preg_match("#^http://steamcommunity.com/openid/id/([0-9]{17,25})#", urldecode($_GET['openid_claimed_id']), $matches);
	$steamID64 = is_numeric($matches[1]) ? $matches[1] : 0;

	$classToLoad = IPSLib::loadLibrary(IPS_KERNEL_PATH . '/classFileManagement.php', 'classFileManagement');
	$classFileManagement = new $classToLoad;
	$response = $classFileManagement->postFileContents(self::STEAM_LOGIN, $params);

	$values = array();

	foreach (explode("\n", $response) as $value) {
		$data = explode(":", $value);

		$key = $data[0];
		unset($data[0]);

		$values[$key] = implode(':', $data);
	}

	// Return our final value
	return $values['is_valid'] === 'true' ? $steamID64 : false;
   }

  • Автор

Теперь при авторизации происходит следующее:

Перекидывает на стим (для разрешения доступа) , разрешаю, перекидывает обратно на сайт, и опять мгновенно возвращает на сайт стима для разрешения доступа (с виду это не заметно, будто просто обновляется страница Steam)

 

 

А при прикреплении профиля к аккауту так же ничего не происходит, просто переадресация на страницу прикрепления без изменений.

Код взят с авторизации IPS4, других изменений я в нем не вижу.

 

Добавьте перед

$params = array(

Код

file_put_contents( DOC_IPS_ROOT_PATH.'cache/steam.log', print_r( $_GET , true )."\n\n" );

И приведете лог из cache/steam.log

  • Автор

Array
(
   [openid_ns] => http://specs.openid.net/auth/2.0
   [openid_mode] => error
   [openid_error] => realm and return_to do not match
   [app] => core
   [module] => global
   [section] => login
   [do] => process
   [use_steam] => 1
)

 

Но на сколько мне известно, на 4ке данная авторизация тоже не работает..

Но на сколько мне известно, на 4ке данная авторизация тоже не работает..

Не видел никаких issue на гитхабе об этом.

  • Автор

Есть варианты решения такой ошибки?

Есть варианты решения такой ошибки?

Есть. Исправить скрипт согласно ошибке. Как? Не знаю. У меня нет возможности его продебажить. Пишите автору.

  • Автор

Пытался связаться с автором - игнор.

Проблему только что решил случайно.

У меня используется https соединение. Удалил условие выбора http\https (видимо оно почему то перестало работать) и установил принудительное https

 

Спасибо, что уделили мне время!

Если откатить замененная выше функция тоже будет работать?

 

Пытался связаться с автором - игнор.

Он поддержку осуществляет на гитхабе.

  • Автор

Если откатить замененная выше функция тоже будет работать?

Да, я использовал исходный код (без указанных вами изменений)

Да, я использовал исходный код (без указанных вами изменений)

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

  • Автор

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

Я с вами полностью согласен.

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

 

Можно еще вопрос:

Возможно ли убрать доп.поле при регистрации через данный метод (steam)?

https://www.rgmix.eu/uploads/imgs/rg_1481462575__.png

 

Просто при такой регистрации я его и так автоматически получаю, и в ручную вводить его уже не нужно

Поле является обязательным к заполнению или нет?

  • Автор

Нет

\admin\applications\core\modules_public\global\register.php

 

Найти

	//-----------------------------------------
	// Show the form (email and display name)
	//-----------------------------------------

Добавить после

	if( $member['steamid'] )
	{
		foreach( $custom_fields_out as $ftype => $value )
		{
			if( is_array( $value ) )
			{
				foreach( $value as $k => $field )
				{
					if( $field['id'] == 'ид_поле' )
					{
						unset( $custom_fields_out[ $ftype ][ $k ] );
					}
				}
			}
		}
	}

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

Аккаунт

Навигация

Поиск

Поиск

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

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