Я запутываюсь.
Я смог сделать открытый вид входа в систему из использования работы LightOpenID.
Все я получаю выполнение, которое является просто openid_identity
такой как"https://www.google.com/accounts/o8/id?id=xxx
". Довольно неутешительный: Я ожидал получать адрес электронной почты также.
т.е. Я должен войти в систему (это - то, что открылось, делает) и знать, что адрес электронной почты Google считает, пользователь раньше входил в систему.
Существует функция $openid->getAttributes()
но все, что я получаю от этого, является просто пустым массивом: Я предполагаю, что Google не собирается давать мне что-либо еще, чем это openid_identity
.
Таким образом, я предполагаю, что я, как предполагается, использую OAuth
, право? Я невежествен об этом. Я только нашел ужасную и запутанную документацию, это любой симулирует объяснять все (и я действительно имею в виду все), или она перестала работать, объясняет что-либо вообще.
Да, конечно, я попытался посмотреть на предыдущие сообщения об этом, так же, как я действительно искал на Google. Прочитайте снова вышеупомянутый абзац.
Я только что обнаружил 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
)
Я все еще не могу получить почтовый индекс и другие данные от Google, но я добился успеха с myOpenID.com .
Вы можете использовать обмен атрибутами OpenID. См. документацию Google здесь (в частности, openid.ax.type.email
).
Наличие аккаунта Google не означает, что вы получите аккаунт gmail. Вы можете завести аккаунт Google с любым адресом электронной почты.
Сказав это, я не думаю, что в спецификации предусмотрено возвращение адресов электронной почты или данных для входа в систему как части идентификации.
OAuth и OpenID - это не одно и то же. Они решают совершенно разные задачи. Я исхожу из предположения, что вы проверили: Federated Login for Google Account Users, где есть немного больше объяснений того, как работают учетные записи для Google Accounts.
Решения: