好吧,我正在尝试实现 Steam OpenID 登录到网站,但我不太确定它是如何完成的,以及 Steam 如何验证使用 OpenID 登录的用户。
至于现在我发现的是,steam 只返回用户 ID 而没有其他任何东西,所以对于其余的事情,我将不得不使用 API 来获取用户的其他信息。
但我不太确定一旦有人通过 OpenID 登录,用户如何在网站上得到验证。
一旦用户从 OpenID 登录,我是否需要进行会话或设置 cookie 或将用户存储到数据库中?
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://cdn.steamcommunity.com/public/images/signinthroughsteam/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 只返回用户 ID,我需要以某种方式与他打交道并让他在我的网站上登录,为此我应该设置一些会话或 cookie,我确实设置了会话并重定向用户返回主页。
但我不明白一些事情。
为什么我的登录按钮一直显示?
还有这个
echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';
为什么它不起作用?它总是显示用户未登录