Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
HooLIGUN

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

Recommended Posts

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

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

Гит хаб

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

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

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

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

 

Или хотя бы

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

Share this post


Link to post
Share on other sites

/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;
   }

  • Upvote 1

Share this post


Link to post
Share on other sites

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

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

 

 

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

Share this post


Link to post
Share on other sites

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

 

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

$params = array(

Код

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

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

  • Upvote 1

Share this post


Link to post
Share on other sites

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ке данная авторизация тоже не работает..

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

  • Upvote 2

Share this post


Link to post
Share on other sites

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

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

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

 

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
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
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...