我感到困惑。
我能够使用LightOpenID进行openid登录工作。
我所做的只是openid_identity
,例如“https://www.google.com/accounts/o8/id?id=xxx
”。非常令人失望:我也希望收到电子邮件地址。
即。 我需要登录(这就是openid所做的) 和以了解用户用来登录的Google帐户的电子邮件地址。
有一个函数$openid->getAttributes()
,但我得到的只是一个空数组:我猜谷歌不会给我除openid_identity
以外的任何东西。
所以我猜测我应该使用OAuth
,对吗?
我对此毫无头绪。
我只发现了可怕且混乱的文档,要么假装解释一切(我做意味着一切),否则它会失败解释< em>任何 。
是的,我当然试图查看之前的帖子,就像我在google上搜索一样。请再读一遍上面的段落。
答案 0 :(得分: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('&', '&', $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
)
我仍然无法从谷歌获得邮政编码和其他人,但我已经成功使用 myOpenID.com 。
答案 1 :(得分:5)
您可以使用OpenID的属性交换。请参阅Google文档here(特别是openid.ax.type.email
)。
答案 2 :(得分:1)
拥有Google帐户并不意味着您获得了一个Gmail帐户。 You can start a Google account with any email address
话虽如此,我认为该规范不会将电子邮件地址或登录数据作为身份的一部分返回。
答案 3 :(得分:1)
OAuth和OpenID不一样。他们解决完全不同的事情。我会根据您检出的假设:Federated Login for Google Account Users它对帐户如何适用于Google帐户有更多解释。
解决方案: