Авторизация через Steam 3.4.8
#1
Отправлено 10 Декабрь 2016 - 17:37
Здравствуйте.
Прошу помощи в исправлении хука IP.Board-Steam-Authentication-Method
Гит хаб
https://github.com/L...thod/tree/IPB34
Суть в том, что около месяца назад, видимо стим что то поменял в своем апи, и хук перестал работать.
При авторизации, и разрешении передачи данных на сайте стима, ничего не происходит.
То есть, при возвращении с сайта, авторизация не происходит, а просто обновляется страница.
Или хотя бы
В архиве есть все файлы хука для разработчика, может можно как то "отладить" ? Посмотреть, какие данные передает стим хуку, для того чтобы сравнить с данными, которые должен получать хук
Прошу помощи в исправлении хука IP.Board-Steam-Authentication-Method
Гит хаб
https://github.com/L...thod/tree/IPB34
Суть в том, что около месяца назад, видимо стим что то поменял в своем апи, и хук перестал работать.
При авторизации, и разрешении передачи данных на сайте стима, ничего не происходит.
То есть, при возвращении с сайта, авторизация не происходит, а просто обновляется страница.
Или хотя бы
В архиве есть все файлы хука для разработчика, может можно как то "отладить" ? Посмотреть, какие данные передает стим хуку, для того чтобы сравнить с данными, которые должен получать хук
#2
Отправлено 11 Декабрь 2016 - 13:25
/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; }
#3
Отправлено 11 Декабрь 2016 - 14:18
Теперь при авторизации происходит следующее:
Перекидывает на стим (для разрешения доступа) , разрешаю, перекидывает обратно на сайт, и опять мгновенно возвращает на сайт стима для разрешения доступа (с виду это не заметно, будто просто обновляется страница Steam)
А при прикреплении профиля к аккауту так же ничего не происходит, просто переадресация на страницу прикрепления без изменений.
Перекидывает на стим (для разрешения доступа) , разрешаю, перекидывает обратно на сайт, и опять мгновенно возвращает на сайт стима для разрешения доступа (с виду это не заметно, будто просто обновляется страница Steam)
Spoiler
А при прикреплении профиля к аккауту так же ничего не происходит, просто переадресация на страницу прикрепления без изменений.
#5
Отправлено 11 Декабрь 2016 - 14:57
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ке данная авторизация тоже не работает..
#12
Отправлено 11 Декабрь 2016 - 15:59
#13
Отправлено 11 Декабрь 2016 - 16:22
siv1987 11 Декабрь 2016 - 15:59 сказал(а):
Это конечно хорошо что заработало с исходным кодом, но вот именно по этому я не люблю делать дебагинг посредством форума. Фиг его знает что там делает пользователь, а ты сиди и ломай голову почему не работает.
Я с вами полностью согласен.
Но я начал работать с исходным кодом, после вашего последнего ответа, так как вы сказали, что у вас нет возможности.
Можно еще вопрос:
Возможно ли убрать доп.поле при регистрации через данный метод (steam)?
https://www.rgmix.eu...481462575__.png
Просто при такой регистрации я его и так автоматически получаю, и в ручную вводить его уже не нужно
- ← Как поменять дату регистрации у пользователя?
- IP.Board 3.x
- Не работает заголовок header Location →