授权客户端 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 处理授权请求时.
这在依赖第 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
一些背景
我使用 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 处理授权请求时.
这在依赖第 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