【问题标题】:Is there a better way to fetch OpenID infos from provider?有没有更好的方法从提供者那里获取 OpenID 信息?
【发布时间】:2010-09-22 17:12:20
【问题描述】:

我是 OpenID 逻辑的新手。我正在使用 Cakebaker 的 CakePHP 的 OpenID 组件,以及 JanRain 的 PHP OpenID 库。

一切运行良好,但我找不到根据提供者和方法(sreg 与 ax)检索用户信息的详尽方法。所以这就是我想出的:

if ($axResponse) {
    if (is_array($a = $axResponse->get('http://axschema.org/contact/email'))) {
        $user_record['email'] = $a[0];
        if (is_array($b = $axResponse->get('http://axschema.org/namePerson'))) {
            $user_record['nickname'] = $b[0];
        }
    } else if (is_array($a = $axResponse->get('http://schema.openid.net/contact/email'))) {
        $user_record['email'] = $a[0];
        if (is_array($b = $axResponse->get('http://schema.openid.net/namePerson'))) {
            $user_record['nickname'] = $b[0];
        }
    }
} else if ($sreg) {
    if (isset($sreg['email'])) {
        $user_record['email'] = $sreg['email'];
    }
    if (isset($sreg['nickname'])) {
        $user_record['nickname'] = $sreg['nickname'];
    }
}

虽然我用谷歌测试成功,但雅虎!和 AOL 的 OpenID,我敢肯定我会遇到其他/较小的提供商的麻烦。有没有更好更好的方法来达到同样的效果?如果我尝试获取其他可选字段,这似乎特别有缺陷......

【问题讨论】:

    标签: php cakephp openid


    【解决方案1】:

    请记住,OpenID 是用户身份验证的标准,而不是数据访问授权的标准。当然,您可以使用 OpenID 获取某些用户信息,但这不是协议的主要意图。 OAuth 是授权标准,如果您需要获取用户数据,您可能希望从它开始。

    【讨论】:

    • 我完全同意你的看法,至于结束这个问题并接受你的回答。幸运的是,从那时起,随着 OAuth2 获得支持,事情发生了很大变化,而现在,我只会使用它,并且在大多数用例中都使用 OpenID。
    【解决方案2】:

    对不起……我对“CakePHP 的 OpenID 组件”了解不多,但我使用过 lightopenid,它也是开源的……

    检查一下: http://code.google.com/p/lightopenid/updates/list

    我已经用过很多次了..很好..我希望这会有所帮助...

    【讨论】:

    • 不幸的是,这对我没有多大帮助,因为一切都已经很好了。我更多的是寻找一种优雅的方式来处理响应,这个库及其文档也没有涵盖...
    • 理论上,你可以从 LightOpenID 复制 get*Attributes() 函数,替换为 $this->data -> $_GET + $_POST
    • 我不得不说这看起来像一个不错的图书馆,但我希望我能保留我的,因为它已经花费了我一些时间。另外,我觉得很奇怪你用比 JanRain 库少得多的代码实现了这么多!
    猜你喜欢
    • 1970-01-01
    • 2019-05-28
    • 2011-10-11
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    相关资源
    最近更新 更多