这是我的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();
}
随着它的回声:
"User http://steamcommunity.com/id/**ID HERE OF USER WHO LOGGED IN**/ has/has not logged in."
所以我试图回应$ openid-&gt; identity(); &安培;在“用户------”之前验证(),但它只会给我:
Fatal error: Call to undefined method LightOpenID::identity() in D:\wamp\www\index.php on line 19
如果我在“用户----------”之后执行此操作,则会打印出“http://steamcommunity.com/id/ * * /有/未登录”。 所以我的问题是,我怎么只打印出实际的ID而不是其他的?并且有人可以解释 - &gt;东西,我相信它与OOP有关,但你呢。
答案 0 :(得分:0)
我已经回答了类似的问题here。哪个应该可以让你开始。
要回答有关如何获取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/
的字符串。请注意网址的openid
部分。如果您没有这样做,那么您的openid库就会出现问题。