Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
HooLIGUN

Авторизация через 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;
   }

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

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

 

 

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

Поделиться сообщением


Ссылка на сообщение

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

 

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

$params = array(

Код

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

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

 

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

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

Поделиться сообщением


Ссылка на сообщение

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

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

Поделиться сообщением


Ссылка на сообщение

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

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

  • Upvote 2

Поделиться сообщением


Ссылка на сообщение

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

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

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

 

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

Нет

Поделиться сообщением


Ссылка на сообщение

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

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...