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;
}
Удачи!