0

我有一个 google 实时 API Web 应用程序,我使用“ realtime-client-utils.js ”库进行身份验证,该库可在 GitHub 上访问: https ://github.com/googledrive/realtime-utils 。

当我打电话RealtimeUtils.authorize(onAuthComplete, usePopup)

我得到了回调方法的response对象。onAuthCompleteresponse对象包含有关授权过程的信息:

在此处输入图像描述

但我需要刚刚进行身份验证的谷歌用户的电子邮件地址。谁能告诉我如何获得电子邮件地址?

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

4

2 回答 2

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)(在我看来最好的选择)请求并使用可以与有效的谷歌访问令牌一起返回的 id_token (JWT)。为此,您必须包含“ https://www.googleapis.com/auth/userinfo.email”OAuth范围,并且在调用 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;
}

祝你好运!

于 2017-02-20T03:04:15.517 回答
0

您可以尝试使用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
}

有关更多信息,请查看此SO question是否可以帮助您。

于 2017-02-19T23:29:42.693 回答