这是我的index.php文件:
<?php
require 'openid.php';
try {
$openid = new LightOpenID('localhost');
if(!$openid->mode) {
if(isset($_GET['login'])) {
$openid->identity = 'http://steamcommunity.com/openid';
header('Location: ' . $openid->authUrl());
}
?>
<form action="?login" method="post">
<button>Login with Steam</button>
</form>
<?php
} elseif($openid->mode == 'cancel') {
echo 'User has canceled authentication!';
} else {
echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';
}
} catch(ErrorException $e) {
echo $e->getMessage();
}
echo's out:
"User http://steamcommunity.com/id/**ID HERE OF USER WHO LOGGED IN**/ has/has not logged in."
所以我尝试回显$openid->identity();,validate()在"User ------"之前但它只会给我:
Fatal error: Call to undefined method LightOpenID::identity() in D:wampwwwindex.php on line 19
如果我在"用户----------"之后执行,它将打印出"http://steamcommunity.com/id/**/has/has not logged in"。所以我的问题是,我如何只打印出实际的ID而不打印其余的?有人能解释一下->的东西吗,我相信它与OOP有关,但是。
我在这里回答了一个类似的问题。这应该可以让你开始。
回答您关于如何获取ID的问题,这也在该答案中提供的代码中完成。如果用户已经被验证,它将从返回值中提取唯一的玩家ID。返回值看起来像http://steamcommunity.com/openid/id/76561197960435530
,你只需要76561197960435530
部分。
$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";
设置一个正则表达式,它将从返回的字符串中获取id。你可能想要验证你收到的是什么,因为它实际上返回了一个像http://steamcommunity.com/openid/id/
这样的字符串。请注意URL的openid
部分。