google realtime api - > gapi.auth.authorize - >获取用户的电子邮件地址

时间:2017-02-19 11:43:12

标签: google-drive-realtime-api google-realtime-api

我有一个谷歌实时API网络应用程序,我使用“realtime-client-utils.js”库进行身份验证,可以在GitHub访问: https://github.com/googledrive/realtime-utils

当我致电RealtimeUtils.authorize(onAuthComplete, usePopup)

我为response回调方法获得了一个onAuthComplete对象。此response对象包含有关授权过程的信息:

enter image description here

但我需要刚认证自己的Google用户的电子邮件地址。谁能告诉我如何获得电子邮件地址?

我尝试使用本教程: https://developers.google.com/+/web/people/#retrieve-an-authenticated-users-email-address

2 个答案:

答案 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;
}
祝你好运!