2013-09-07 9 views
18

Bevor ich anfange, möchte ich sagen, ich weiß absolut nichts über OpenID. Ich möchte nicht einmal das tun, wofür OpenID verwendet wird, aber ich kann mir vorstellen, dass die Leute es erwähnen werden, aber das ist nicht das, wonach ich suche.Steam API Authentifizierung

Ich habe Software. Diese Software erfordert, dass Benutzer ihren Steam-Benutzernamen bei der Registrierung angeben. Sie melden sich nicht über Steam an und geben nur ihren Benutzernamen an, damit andere ihren Steam-Benutzernamen kennen. Daher ist OpenID nicht erforderlich.

Ich weiß, ich kann einfach nur ein Textfeld hinzufügen und sie ihren Steam-Benutzernamen auflisten und es einen Tag nennen. Allerdings können die Leute so ziemlich jeden beliebigen Steam-Benutzernamen eingeben, den sie wollen und getan werden. Ich möchte stattdessen ihre Benutzernamen bestätigen können.

Idealerweise würde es einen "authenticate steam account" Button geben. Die Leute klicken darauf und es erscheint ein Steam-Anmeldeformular. Leute loggen sich ein und Steam gibt ihren Benutzernamen zurück (und vielleicht einige zusätzliche Daten, wie zB ihren Avatar). Was wäre der beste Weg, dies zu tun?

Antwort

35

Es besteht ein Bedarf für OpenID. Das ist die Methode, die Valve gemäß ihrer documentation verwendet.

Sie erwähnen nicht, was Ihre Anwendung geschrieben ist, so kann ich nur vermuten, dass Sie dies über eine Webseite tun. In diesem Fall empfehle ich die Verwendung der Bibliothek LightOpenID. Von da an sollte dieser Beispielcode Ihnen den Einstieg erleichtern.

<?php 
require 'includes/lightopenid/openid.php'; 
$_STEAMAPI = "YOURSTEAMAPIKEY"; 
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://cdn.steamcommunity.com/public/images/signinthroughsteam/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"; 

       $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(); 
} 
?> 

Damit wird dem Benutzer eine Steam Login ID-Schaltfläche angezeigt. Wenn Sie darauf klicken, wird der Benutzer zur Anmeldeseite der Steam Community umgeleitet. Nach der Anmeldung leitet der Benutzer zurück zu Ihrer Seite, die Sie im Konstruktor LightOpenID festgelegt haben. Wenn der Benutzer validiert wurde, wird die eindeutige Spieler-ID vom zurückgegebenen Wert abgezogen. Dieser zurückgegebene Wert sieht wie http://steamcommunity.com/openid/id/76561197960435530 aus, und Sie benötigen nur den 76561197960435530 Teil.

An dieser Stelle können Sie Steam abfragen, um Spielerinformationen zu erhalten. In dem bereitgestellten Beispiel wird der Benutzer abgefragt und grundlegende Spielerinformationen werden angezeigt.

+1

>> Gibt es eine Möglichkeit, OpenID Login in Android zu implementieren? >> Falls nicht, ist es dem Benutzer trotzdem möglich, sich anzumelden? –

+2

Für jetzt ist das ungenau, "Da das OpenID-Protokoll von der OpenID Foundation veraltet ist, ist diese Bibliothek ebenfalls veraltet und wird als solche nicht mehr verwaltet." https://code.google.com/p/lightopenid/ – Lobato

+0

Sie können die LightOpenID-Bibliothek von hier https://github.com/iignatov/LightOpenID herunterladen –