Получение Gmail обращается с открытым …? OAuth?

Я запутываюсь.

Я смог сделать открытый вид входа в систему из использования работы LightOpenID.

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

т.е. Я должен войти в систему (это - то, что открылось, делает) и знать, что адрес электронной почты Google считает, пользователь раньше входил в систему.

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

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

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

5
задан Alix Axel 14 July 2010 в 07:01
поделиться

4 ответа

Я только что обнаружил 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 .

10
ответ дан 18 December 2019 в 09:47
поделиться

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

5
ответ дан 18 December 2019 в 09:47
поделиться

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

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

1
ответ дан 18 December 2019 в 09:47
поделиться

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

Решения:

  1. Это на Python, но вы сможете адаптировать его для PHP.
  2. Это на .Net - опять же, вы должны быть в состоянии изменить режим AX самостоятельно.
1
ответ дан 18 December 2019 в 09:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: