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

时间:2014-03-15 04:28:00

标签: 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';
            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有关,但你呢。

1 个答案:

答案 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库就会出现问题。