我有一个谷歌实时API网络应用程序,我使用“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/#retrieve-an-authenticated-users-email-address
答案 0 :(得分:0)
您可以尝试使用People: get方法获取某人的个人资料。此外,此方法返回响应正文中的人员资源。
以下是您可以通过此处获得的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是否可以为您提供帮助。
答案 1 :(得分:0)
有几种方法可以检索用户的电子邮件地址。最简单的方法是使用您收到的用户access_token返回的id_token(下面的#3)。
1)您可以在包含“个人资料”OAuth范围后使用UserInfo端点:https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=[token]。使用您的访问令牌对此API进行脏查询将返回用户的电子邮件地址。
2)如另一个答案中所述,您可以使用People.Get API。
3)(在我看来,最好的选择)请求并使用可以与有效的Google Access Token一起返回的id_token(JWT)。为此,您必须包含“https://www.googleapis.com/auth/userinfo.email”OAuth范围,并且在调用Google授权时,“response_type”参数必须设置为“token id_token”。你可以通过编辑Realtime 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;
}
祝你好运!