1

我试图建立一个网站,用户可以通过 Steam OpenID 登录并在网站上做一些事情。

但我也想实现一些蒸汽不提供的功能:

如果用户第一次访问该网站并尝试登录,他使用 Steam OpenID 功能来检索他的用户信息(该 ID 仅通过 openID 传递,其余信息我可以通过 API 获取)但现在我需要先验证用户我启用了其他网站功能,以验证用户我需要检查他的帐户中是否有超过 20 个游戏。如果他有超过 20 个游戏,他可以继续使用网站,如果他没有足够的游戏,则发布通知,一旦他有足够的游戏,他可以继续登录。

当用户登录并验证后,我需要将他的数据插入数据库,以便能够将他与我网站上的功能联系起来,例如计算评论、积分和其他活动。

最后,一旦他登录,通过 cookie 记住他(有会话,但我知道它们只在浏览器关闭之前有效)所以 cookie 将是他下次访问网站时的解决方案,他不需要再次登录。

我知道如何做一些事情,但是如果有人能指出我并帮助我如何实现至少一半的目标,我将非常感激。

到目前为止,我拥有的代码就是这个。

function login() {
$openid = new LightOpenID(SITEURL);

if(!$openid->mode) {

    if(isset($_GET['go']) && $_GET['go'] == 'login' ) {
        $openid->identity = 'http://steamcommunity.com/openid';
        header('Location: ' . $openid->authUrl());
    }

    if(!isset($_SESSION['RaffleSteamAuth'])) {
        echo '<li><a href="?go=login"><img border="0" src="http://cdn.steamcommunity.com/public/images/signinthroughsteam/sits_small.png" /></a></li>';
    }
}

elseif($openid->mode == 'cancel') {
    echo 'User has canceled Authentication.';
}

elseif(!isset($_SESSION['RaffleSteamAuth'])) {

        $_SESSION['RaffleSteamAuth'] = $openid->validate() ? $openid->identity : null;
        $_SESSION['RaffleSteamID64'] = str_replace('http://steamcommunity.com/openid/id/', '',$_SESSION['RaffleSteamAuth']);
        if($_SESSION['RaffleSteamAuth'] != null) {
            $steam64 = str_replace('http://steamcommunity.com/openid/id/', '', $_SESSION['RaffleSteamAuth']);
            $profile = file_get_contents('http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=' . APIKEY . '&steamids=' . $steam64);
            $buffer = fopen('cache/' . $steam64 . '.json', 'w+');
            fwrite($buffer, $profile);
            fclose($buffer);
        }

        header('Location: ' . SITEURL);
    }

if(isset($_SESSION['RaffleSteamAuth'])) {
    $steam = json_decode(file_get_contents('cache/' . $_SESSION['RaffleSteamID64'] . '.json'));
    echo '<li class="dropdown">';
    echo '<a href="#" class="dropdown-toggle" data-toggle="dropdown"><img src="' . $steam->response->players[0]->avatar . '"/> ' . $steam->response->players[0]->personaname .'<b class="caret"></b></a>';
    echo '<ul class="dropdown-menu">';
    echo '<li><a href="?go=logout">Logout</a></li>';
    echo '</ul>';
    echo '</li>';

}

if(isset($_GET['go']) && $_GET['go'] == 'logout' ){
    unset($_SESSION['RaffleSteamAuth']);
    unset($_SESSION['RaffleSteamID64']);
    header('Location: ' . SITEURL);
}

}

4

0 回答 0