2017-02-19 1 views
0

У меня есть Google в реальном времени API веб-приложения, и я использую «realtime-client-utils.js» библиотеку для аутентификации, который доступен на GitHub: https://github.com/googledrive/realtime-utils.Google в реальном времени апи -> gapi.auth.authorize -> получить адрес электронной почты пользователя

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

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

enter image description here

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

Я пытался использовать этот учебник: https://developers.google.com/+/web/people/#retrieve-an-authenticated-users-email-address

ответ

0

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

Вот response, что вы можете сделать, сделав это.

{ 
    "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 
} 

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

0

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

1) Вы можете использовать конечную точку UserInfo после включения области OAuth 'profile': 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' должен быть установлен в 'токен id_token'. Вы можете сделать это, отредактировав Realtime API, чтобы передать в «response_type:« токен 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; 
} 

Удачи вам!

Смежные вопросы