【问题标题】:OpenID & OOP, can someone explain this to me?OpenID & OOP,有人可以向我解释一下吗?
【发布时间】:2014-04-20 14:26:00
【问题描述】:

这是我的 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->identity(); & validate() 在“用户 ------”之前,但它只会给我:

Fatal error: Call to undefined method LightOpenID::identity() in D:\wamp\www\index.php on line 19

如果我在“用户 ----------”之后执行此操作,它将打印出“http://steamcommunity.com/id/**/ has/has not logged in”。 所以我的问题是,我如何只打印出实际的 ID 而不是其余的?有人可以解释一下 -> 的东西,我相信它与 OOP 有关,但是你。

【问题讨论】:

    标签: php oop openid


    【解决方案1】:

    我已经回答了一个类似的问题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/ 的字符串。请注意 URL 的 openid 部分。如果你没有得到那个,你的 openid 库有问题。

    【讨论】:

      猜你喜欢
      • 2011-04-24
      • 1970-01-01
      • 2019-11-28
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      • 2012-03-15
      相关资源
      最近更新 更多