OpenID和OOP,有人可以向我解释一下吗?



这是我的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部分。

相关内容

  • 没有找到相关文章

最新更新