API Google Realtime -> gapi.auth.authorize -> получить адрес электронной почты пользователя

У меня есть веб-приложение Google Realtime API, и я использую библиотеку " https://www.gstatic.com/realtime/realtime-client-utils.js" для аутентификации, которая доступна на GitHub: https://github.com/googledrive/realtime-utils.

Когда я звоню RealtimeUtils.authorize(onAuthComplete, usePopup)

Я получаю response объект для onAuthComplete метод обратного вызова. это response Объект содержит информацию о процессе авторизации:

Но мне нужен адрес электронной почты пользователя Google, который только что аутентифицировался. Кто-нибудь может сказать мне, как я могу получить адрес электронной почты?

Я пытался использовать этот учебник: https://developers.google.com/+/web/people/

2 ответа

Вы можете попробовать использовать метод People: get, чтобы получить профиль человека. Также этот метод возвращает личный ресурс в теле ответа.

Вот ответ, который вы можете получить, делая это.

{
  "kind": "plus#person",
  "etag": etag,
  "nickname": string,
  "occupation": string,
  "skills": string,
  "birthday": string,
  "gender": string,
  "emails": [
    {
      "value": string,
      "type": string
    }
  ],
  "urls": [
    {
      "value": string,
      "type": string,
      "label": string
    }
  ],
  "objectType": string,
  "id": string,
  "displayName": string,
  "name": {
    "formatted": string,
    "familyName": string,
    "givenName": string,
    "middleName": string,
    "honorificPrefix": string,
    "honorificSuffix": string
  },
  "tagline": string,
  "braggingRights": string,
  "aboutMe": string,
  "relationshipStatus": string,
  "url": string,
  "image": {
    "url": string,

  },
  "organizations": [
    {
      "name": string,
      "department": string,
      "title": string,
      "type": string,
      "startDate": string,
      "endDate": string,
      "location": string,
      "description": string,
      "primary": boolean
    }
  ],
  "placesLived": [
    {
      "value": string,
      "primary": boolean
    }
  ],
  "isPlusUser": boolean,
  "language": string,
  "ageRange": {
    "min": integer,
    "max": integer
  },
  "plusOneCount": integer,
  "circledByCount": integer,
  "verified": boolean,
  "cover": {
    "layout": string,
    "coverPhoto": {
      "url": string,
      "height": integer,
      "width": integer
    },
    "coverInfo": {
      "topImageOffset": integer,
      "leftImageOffset": integer
    }
  },
  "domain": string
}

Для получения дополнительной информации, проверьте этот вопрос, если он может помочь вам.

Есть несколько способов получить адрес электронной почты пользователя. Проще всего использовать id_token, возвращаемый полученным пользователем access_token (#3 ниже).

1) Вы можете использовать конечную точку UserInfo после включения области OAuth "профиля": https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=[token]. Создание грязного запроса к этому API с вашим токеном доступа вернет адрес электронной почты пользователя.

2) Как отмечено в другом ответе, вы можете использовать API People.Get.

3) (На мой взгляд, лучший вариант) Запросите и используйте id_token (JWT), который можно вернуть вместе с действующим токеном Google Access. Для этого вы должны включить область действия OAuth https://www.googleapis.com/auth/userinfo.email, а при вызове авторизации Google для параметра response_type необходимо установить значение "token id_token". Вы можете сделать это, отредактировав API реального времени, чтобы передать 'response_type: "token id_token" вместе с другими параметрами для gapi.auth.authorize.

Когда у вас есть id_token, его нужно декодировать. Вы можете использовать приведенный ниже код и просто передать полученный вами объект ответа. Полученный в результате декодированный id_token будет содержать адрес электронной почты пользователя.

function decodeJWT(rawToken)
{
    var decoded;

    if (rawToken && rawToken.id_token)
    {
        var jwt = rawToken.id_token;

        var parts = jwt.split('.');

        try
        {
            decoded = JSON.parse(b64_to_utf8(parts[1]));
        }
        catch (err)
        {
            // Handle Error
        }
    }

    return decoded;
}

function b64_to_utf8(str)
{
    var utf8;

    try
    {
        utf8 = decodeURIComponent(escape(window.atob(str)));
    }
    catch (err)
    {
        // Handle Error
    }

    return utf8;
}

Удачи!

Другие вопросы по тегам