2013-09-07 12 views
18

Prima di iniziare, lasciami dire che non conosco assolutamente nulla di OpenID. Non voglio nemmeno fare ciò per cui OpenID è usato, ma immagino che la gente lo menzioni, ma non è quello che sto cercando.Steam API Authentication

Ho un software. Questo software richiede agli utenti di fornire il proprio nome utente Steam al momento della registrazione. Non stanno firmando tramite Steam, semplicemente fornendo il loro nome utente in modo che altri conoscano il loro nome utente Steam. Quindi non c'è bisogno di OpenID.

Lo so, posso semplicemente aggiungere un campo di testo e chiedere loro di elencare il loro nome utente Steam e chiamarlo un giorno. Tuttavia, facendo questo, le persone possono inserire praticamente qualsiasi nome utente di Steam che vogliono e essere fatto. Vorrei invece poter confermare i loro nomi utente.

Idealmente, ci sarebbe un pulsante "autentica account di vapore". La gente fa clic su di esso e visualizza un modulo di accesso di Steam. Le persone eseguono il login e quindi restituiscono il proprio nome utente (e forse alcuni dati aggiuntivi, come il loro avatar). Quale sarebbe il modo migliore per farlo?

risposta

35

C'è bisogno di OpenID. Questo è il metodo che Valve utilizza in base al loro documentation.

Non si parla di cosa è scritta la tua applicazione, quindi posso solo supporre che tu stia facendo questo tramite una pagina web. In tal caso, consiglio di utilizzare la libreria LightOpenID. Da lì, questo codice di esempio dovrebbe essere in grado di iniziare.

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

Utilizzando questo, presenterà all'utente un pulsante ID accesso Steam. Quando viene fatto clic, reindirizza l'utente alla pagina di accesso di Steam Community. Dopo l'accesso, l'utente viene reindirizzato alla pagina, impostata sul costruttore LightOpenID. Se l'utente è stato convalidato, estrarrà l'ID giocatore univoco dal valore restituito. Il valore restituito è simile a http://steamcommunity.com/openid/id/76561197960435530 e serve solo la parte 76561197960435530.

A questo punto è possibile interrogare Steam per ottenere informazioni sul giocatore. Nell'esempio fornito, l'utente viene interrogato e vengono visualizzate le informazioni di base del giocatore.

+1

>> C'è un modo per implementare l'accesso openID in Android? >> In caso contrario, è comunque necessario consentire all'utente di accedere al vapore? –

+2

Per ora questo è inaccurato, "Poiché il protocollo OpenID è stato reso obsoleto da OpenID Foundation, anche questa libreria è obsoleta e, come tale, non viene più mantenuta." https://code.google.com/p/lightopenid/ – Lobato

+0

Puoi scaricare la libreria LightOpenID da qui https://github.com/iignatov/LightOpenID –