Php OpenID&;哎呀,有人能给我解释一下吗?
这是我的index.php文件:Php OpenID&;哎呀,有人能给我解释一下吗?,php,oop,openid,Php,Oop,Openid,这是我的index.php文件: <?php require 'openid.php'; try { $openid = new LightOpenID('localhost'); if(!$openid->mode) { if(isset($_GET['login'])) { $openid->identity = 'http://steamcommunity.com/openid'; heade
<?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();
}
所以我尝试回显$openid->identity();&在“User------”前面加上validate(),但它只会给出:
Fatal error: Call to undefined method LightOpenID::identity() in D:\wamp\www\index.php on line 19
如果我在“用户------------”之后执行此操作,它将打印出“***/已/未登录”。
所以我的问题是,我如何只打印出实际的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
部分。如果您没有得到,那么您的openid库就有问题
$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";