Ну, я пытаюсь внедрить вход Steam OpenID на сайт, но я не совсем уверен, как это делается и как Steam проверяет пользователей, которые вошли в систему с OpenID.
Что до сих пор, что я узнал, это то, что пар только возвращает идентификатор пользователя и ничего больше, поэтому для остальных вещей мне придется использовать API для получения другой информации о пользователе.
Но я не совсем уверен, как пользователи получают подтверждение на веб-сайте, когда кто-то регистрируется через OpenID.
Нужно ли мне делать сеанс или устанавливать cookie или хранить пользователя в базе данных после входа пользователя из OpenID?
try { # Change 'localhost' to your domain name. $openid = new LightOpenID('http://localhost/openid'); if(!$openid->mode) { if(isset($_GET['login'])) { $openid->identity = 'http://steamcommunity.com/openid'; header('Location: ' . $openid->authUrl()); } echo '<li><a href="?login"><img border="0" src="http://img.ruphp.com/php/sits_small.png" /></a></li>'; } elseif($openid->mode == 'cancel') { echo 'User has canceled authentication!'; } else { $_SESSION['loged']=1; header('Location: http://localhost/openid'); } if(isset($_SESSION['loged'])) { echo '<li><a href="?logout">Logout</a></li>'; } if(isset($_GET['logout'])) { unset($_SESSION['loged']); } echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.'; } catch(ErrorException $e) { echo $e->getMessage(); }
Я принимаю этот код в качестве примера
Я предполагаю, что
if(!openid->mode)
означает, что openid не установлен? чем я должен показать кнопку входа в систему и перейти к поставщику openid для входа в систему, если я нажму эту кнопку
И следующий – это еще, если пользователь не запустил сообщение отмены отмены
или следующая часть, если пользователь зарегистрирован, так как openid возвращает только идентификатор пользователя, мне нужно как-то разобраться с ним и сохранить его на моем сайте, для этой части я должен установить сеанс или файл cookie, который я установил для сеанса и перенаправил пользователь возвращается на главную страницу.
Но я мало что понимаю.
Почему моя кнопка входа в систему отображается постоянно?
И это
echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';
Почему он не работает? он всегда показывает, что пользователь не зарегистрирован
Это код, который я использовал для аутентификации через OpenID Steam
<?php require 'includes/lightopenid/openid.php'; $_STEAMAPI = "YOURSTEAMAPIKEY"; // CHECK IF COOKIE EXISTS WITH PROFILE ID. IF NOT, LOG THE USER IN try { $openid = new LightOpenID('http://URL.TO.REDIRECT.TO.AFTER.LOGIN/'); if(!$openid->mode) { if(isset($_GET['login'])) { $openid->identity = 'http://steamcommunity.com/openid/?l=english'; // This is forcing english because it has a weird habit of selecting a random language otherwise header('Location: ' . $openid->authUrl()); } ?> <form action="?login" method="post"> <input type="image" src="http://img.ruphp.com/php/sits_small.png"> </form> <?php } elseif($openid->mode == 'cancel') { echo 'User has canceled authentication!'; } else { if($openid->validate()) { $id = $openid->identity; // identity is something like: http://steamcommunity.com/openid/id/76561197960435530 // we only care about the unique account ID at the end of the URL. $ptn = "/^http:\/\/steamcommunity\.com\/openid\/id\/(7[0-9]{15,25}+)$/"; preg_match($ptn, $id, $matches); echo "User is logged in (steamID: $matches[1])\n"; // HERE YOU CAN SET A COOKIE, SAVE TO A DATABASE, CREATE A SESSION, ETC. // This is an example of what you can do once you have the profile id $url = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=$_STEAMAPI&steamids=$matches[1]"; $json_object= file_get_contents($url); $json_decoded = json_decode($json_object); foreach ($json_decoded->response->players as $player) { echo " <br/>Player ID: $player->steamid <br/>Player Name: $player->personaname <br/>Profile URL: $player->profileurl <br/>SmallAvatar: <img src='$player->avatar'/> <br/>MediumAvatar: <img src='$player->avatarmedium'/> <br/>LargeAvatar: <img src='$player->avatarfull'/> "; } } else { echo "User is not logged in.\n"; } } } catch(ErrorException $e) { echo $e->getMessage(); } ?>
в<?php require 'includes/lightopenid/openid.php'; $_STEAMAPI = "YOURSTEAMAPIKEY"; // CHECK IF COOKIE EXISTS WITH PROFILE ID. IF NOT, LOG THE USER IN try { $openid = new LightOpenID('http://URL.TO.REDIRECT.TO.AFTER.LOGIN/'); if(!$openid->mode) { if(isset($_GET['login'])) { $openid->identity = 'http://steamcommunity.com/openid/?l=english'; // This is forcing english because it has a weird habit of selecting a random language otherwise header('Location: ' . $openid->authUrl()); } ?> <form action="?login" method="post"> <input type="image" src="http://img.ruphp.com/php/sits_small.png"> </form> <?php } elseif($openid->mode == 'cancel') { echo 'User has canceled authentication!'; } else { if($openid->validate()) { $id = $openid->identity; // identity is something like: http://steamcommunity.com/openid/id/76561197960435530 // we only care about the unique account ID at the end of the URL. $ptn = "/^http:\/\/steamcommunity\.com\/openid\/id\/(7[0-9]{15,25}+)$/"; preg_match($ptn, $id, $matches); echo "User is logged in (steamID: $matches[1])\n"; // HERE YOU CAN SET A COOKIE, SAVE TO A DATABASE, CREATE A SESSION, ETC. // This is an example of what you can do once you have the profile id $url = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=$_STEAMAPI&steamids=$matches[1]"; $json_object= file_get_contents($url); $json_decoded = json_decode($json_object); foreach ($json_decoded->response->players as $player) { echo " <br/>Player ID: $player->steamid <br/>Player Name: $player->personaname <br/>Profile URL: $player->profileurl <br/>SmallAvatar: <img src='$player->avatar'/> <br/>MediumAvatar: <img src='$player->avatarmedium'/> <br/>LargeAvatar: <img src='$player->avatarfull'/> "; } } else { echo "User is not logged in.\n"; } } } catch(ErrorException $e) { echo $e->getMessage(); } ?>
Это представит пользователю кнопку Steam Login ID, которая при нажатии будет перенаправлять пользователя на страницу входа в Steam. После входа в систему пользователь отправляется обратно в ваш домен. Это то, что установлено в конструкторе LightOpenID. Если пользователь был проверен, он вытащит уникальный идентификатор игрока из возвращаемого значения. Это возвращаемое значение выглядит как http://steamcommunity.com/openid/id/76561194350435530
, и вам нужна только часть 76561194350435530
. Используя это, вы можете запросить любой API-интерфейс Valve, который принимает идентификатор профиля.
Настройка файлов cookie и сеансов может быть выполнена в конце процесса входа в систему.