授权客户端 JS API 使用 Google 的 gapi 库调用现有访问令牌?

Authorized client-side JS API calls with Google's gapi library with an existing access token?

一些背景

我使用 Meteor 作为应用程序框架,我使用 accounts-google 包来验证用户。使用 accounts 包非常好,因为它处理了获取访问令牌、在到期时刷新它们等所有脏工作。但是,我想要更多关于用户的配置文件信息,而不是 Meteor.user() 对象中填充的信息。

使用 Facebook,我能够轻松加载他们的客户端 JS 库,并使用 Meteor.user().services.facebook.accessToken 并按照 API 上的文档进行图形 api 请求:

https://developers.facebook.com/docs/javascript/reference/FB.api

我的问题

当引用 Google 的 JavaScript API 时,文档指出在进行 API 调用时,请求会自动包含访问令牌,但仅当使用 gapi 处理授权请求时.

https://developers.google.com/api-client-library/javascript/features/authentication#MakingtheAPIrequest

这在依赖第 3 方授权包时没有帮助(或者当您的应用程序在客户端之外处理 Google 的身份验证时)。

有没有什么方法可以在使用 gapi.client 库方法的请求中使用现有的访问令牌?

我为此纠结了很长时间,在这里找到了一个类似的问题:

Google OAuth2 - Using externally generated Access Token - With JS Client Library

然而,这个人已经知道必须做什么,只是不知道如何进行适当的调用,所以我找到它是相当幸运的。

解决方案

为了使用现有的访问令牌发出 gapi 请求,您必须调用:

    gapi.auth.setToken({
        access_token: "token_string"
    });

在提出客户请求之前。在 Meteor 中,您可以使用 Meteor.user().services.google.accessToken 代替上面的 "token_string"

关于该方法的文档在这里:

https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiauthsetToken