5

我越来越糊涂了。

我能够使用LightOpenID使 openid 登录有点工作。

我所做的只是openid_identity诸如“ https://www.google.com/accounts/o8/id?id=xxx”之类的。非常令人失望:我也期待得到电子邮件地址。

我需要登录(这就是openid 所做的)知道用户用于登录的google 帐户的电子邮件地址。

有这个函数$openid->getAttributes(),但我从中得到的只是一个空数组:我猜谷歌不会给我任何东西openid_identity

所以我我应该使用OAuth,对吧?我对此一无所知。我只发现了可怕而混乱的文档,要么假装解释一切(我意思是一切),要么根本无法解释任何 事情

是的,当然我已经尝试查看以前的帖子,就像我在谷歌上搜索一样。请再读一遍上面的段落。

4

4 回答 4

10

我刚刚发现了LightOpenID,我认为它很棒。我已经设法使用以下修改获得了电子邮件地址、名字和姓氏以及首选语言example-gmail.php

<?php

require_once('openid.php');

if (empty($_GET['openid_mode']))
{
    if (isset($_GET['login']))
    {
        $openid = new LightOpenID();
        $openid->identity = 'https://www.google.com/accounts/o8/id';
        $openid->required = array('namePerson/first', 'namePerson/last', 'contact/email', 'pref/language');

        header('Location: ' . $openid->authUrl());
        //header('Location: ' . str_replace('&amp;', '&', $openid->authUrl()));
    }

    else
    {
        echo '<form action="?login" method="post">' . "\n";
        echo '<button>Login with Google</button>' . "\n";
        echo '</form>' . "\n";
    }
}

else if ($_GET['openid_mode'] == 'cancel')
{
    echo 'User has canceled authentication!';
}

else
{
    $openid = new LightOpenID();

    echo 'User ' . ($openid->validate() ? $_GET['openid_identity'] . ' has ' : 'has not ') . 'logged in.';

    echo '<pre>';
    print_r($openid->getAttributes());
    echo '</pre>';
}

?>

我更改了代码以使其更具可读性,输出:

User https://www.google.com/accounts/o8/id?id=*** has logged in.

Array
(
    [namePerson/first] => Alix
    [contact/email] => ***@gmail.com
    [pref/language] => en
    [namePerson/last] => Axel
)

我仍然无法从 Google 获得邮政编码和其他信息,但我在myOpenID.com上取得了成功。

于 2010-07-14T07:00:30.220 回答
5

您可以使用 OpenID 的属性交换。请参阅此处的 Google 文档(特别是openid.ax.type.email)。

于 2010-07-13T23:21:30.640 回答
1

拥有 Google 帐户并不意味着您拥有 gmail 帐户。您可以使用任何电子邮件地址创建 Google 帐户

话虽如此,我认为返回电子邮件地址或登录数据作为身份的一部分并不是规范的一部分。

于 2010-07-13T23:09:00.000 回答
1

OAuth 和 OpenID 不一样。他们解决完全不同的事情。我假设您已签出:Google 帐户用户的联合登录它对 Google 帐户的帐户如何工作有更多解释。

解决方案:

  1. 这是在 Python 中,但您应该能够针对 PHP 进行相应的调整。
  2. 这是在 .Net 中 - 您应该能够自己更改 AX 模式。
于 2010-07-13T23:20:07.320 回答