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