Получение адреса gmail с помощью ... openid?OAuth? - PullRequest
5 голосов
/ 14 июля 2010

Я запутался.

Мне удалось заставить openid войти вроде как работать, используя LightOpenID .

Все, что я получаю, это просто openid_identityтакой как "https://www.google.com/accounts/o8/id?id=xxx".Довольно разочаровывает: я ожидал получить адрес электронной почты тоже.

т.е. Мне нужно войти (это то, что делает openid) и , чтобы узнать адрес электронной почтыадрес учетной записи Google, которую пользователь использовал для входа в систему.

Есть функция $openid->getAttributes(), но я получаю только пустой массив: я думаю, что Google ничего не даст мнекроме этого openid_identity.

Так что я думаю Я должен использовать OAuth, верно?Я понятия не имею об этом.Я нашел только ужасную и запутанную документацию, которая либо делает вид, что объясняет все (а я делаю имею в виду все ), либо не может объяснить что-либо вообще .

Да, конечно, я пытался просмотреть предыдущие посты об этом, так же как я делал поиск в Google.Прочтите еще раз вышеприведенный абзац, пожалуйста.

Ответы [ 4 ]

10 голосов
/ 14 июля 2010

Я только что обнаружил LightOpenID , и я думаю, что это замечательно.Мне удалось получить адрес электронной почты, имя, фамилию и предпочитаемый язык, используя следующую модификацию example-gmail.php:

<code><?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 '
';}?>

Я изменил код, чтобы сделать его немного более читабельным, вывод:

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 .

5 голосов
/ 14 июля 2010

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

1 голос
/ 14 июля 2010

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

Решения:

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

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

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

...