授权客户端JS API调用Google'的具有现有访问令牌的gap库

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

本文关键字:访问令牌 gap JS 客户端 API 调用 Google 授权      更新时间:2023-09-26

一些背景

我使用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调用时,请求会自动包含访问令牌,但仅在使用gap处理授权请求时

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

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

是否有任何方法可以在使用gapi.client库方法的请求中使用现有的访问令牌?

我为此挣扎了很长时间,在这里我发现了一个类似的问题:

Google OAuth2-使用外部生成的访问令牌-使用JS客户端库

然而,这个人已经知道该做什么了,只是不知道如何打合适的电话,所以我很幸运找到了它。

解决方案

为了使用现有的访问令牌发出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