Php OpenID&;哎呀,有人能给我解释一下吗?

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

这是我的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();
}
所以我尝试回显$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";