Получение адреса gmail с помощью … openid? OAuth?

Я смущаюсь.

Я смог сделать 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('&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 .

Вы можете использовать обмен атрибутами OpenID. См. Документацию Google здесь (в частности, openid.ax.type.email ).

OAuth и OpenID не совпадают. Они решают совершенно разные вещи. Я согласен с тем, что вы проверили: Federated Login для аккаунта Google. У пользователя есть несколько больше объяснений относительно того, как учетные записи работают для учетных записей Google.

Решения:

  1. Это в Python, но вы должны иметь возможность соответствующим образом настроить его для PHP.
  2. Это в .Net – вы снова сможете изменить режим AX самостоятельно.

Наличие учетной записи Google не означает, что вы получаете учетную запись gmail. Вы можете запустить учетную запись Google с любым адресом электронной почты .

Сказав, что я не думаю, что его часть спецификации вернет адреса электронной почты или данные входа в систему как часть идентификатора.