gpt4 book ai didi

google-api - GoogleUser.getAuthResponse()不包含access_token

转载 作者:行者123 更新时间:2023-12-03 13:17:25 24 4
gpt4 key购买 nike

UPDATE2:我重新审视了此问题,并通过仔细遵循以下链接的doco来解决了该问题。但是首先,对于那些为此而苦苦挣扎的人,您会处于很好的陪伴中。 Google的doco版本太多,令人困惑!您是否在HTML中包含platform.js或client.js?您是否加载gapi.auth或gapi.auth2?您是否使用gapi.auth2.render或gapi.auth.authorize或gapi.auth2.init,依此类推。

下面链接了返回access_token的方式(截至本文发稿)。通过使用platform.js仔细遵循指南和引用,我设法使此工作正常进行。然后使用gapi.load('drive',callback)动态加载其他库,例如client.js。

https://developers.google.com/identity/sign-in/web/listeners
https://developers.google.com/identity/sign-in/web/reference

====繁荣的原始问题====

更新1:
我已经更新了代码示例,以对googleUser对象进行递归搜索。至少这不应在后续库中中断。

下面是一个代码片段,用于处理以下问题:Google gapi.auth2.AuthResponse对象中的access_token不在顶层...在对象的深处隐藏了:(!

因此它是可检索的,但不是顶级的!我注意到这似乎是一个计时问题……一旦应用程序在随后的检查中运行了一段时间,它确实包含了顶层的访问 token !

var authResponse = _.googleUser.getAuthResponse();
_.id_token = authResponse.id_token; // Always exists

// access_token should also be a param of authResponse
if (authResponse.access_token) {
debug("Worked this time?");
_.access_token = authResponse.access_token;
} else {
// !!! Internal object access !!!
debug("Attempt to get access token from base object.");
_.access_token = _.objRecursiveSearch("access_token", _.googleUser);

if (_.access_token) {
debug("Access token wasn't on authResponse but was on the base object, WTF?");
} else {
debug("Unable to retrieve access token.");
return false;
}
}


_.objRecursiveSearch = function(_for, _in) {
var r;
for (var p in _in) {
if (p === _for) {
return _in[p];
}
if (typeof _in[p] === 'object') {
if ((r = _.objRecursiveSearch(_for, _in[p])) !== null) {
return r;
}
}
}
return null;
}

我猜想getAuthResponse一旦准备好就可以提供回调,但是我看不到API的位置。
https://developers.google.com/identity/sign-in/web/reference

最佳答案

我知道这个问题已经很老了,但是当谷歌搜索“.getAuthResponse()没有access_token”时,它会首先出现,这就是我到达这里的方式。

因此,对于2016年(或以后)的那些人来说,这就是我发现的

.getAuthResponse上有一个 secret 参数,我发现的任何地方都没有记录。如果您要在应用中运行以下内容

console.log(gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse);

您将看到以下内容(从我的控制台复制/粘贴)

function (a){if(a)return this.hg;a=.HE;var c=.rf(this.hg);!a.Ph||a.dL||a.Lg||(delete c.access_token,delete c.scope);return c}



这表明 .getAuthResponse()函数正在寻找一个参数,据我所知,它甚至没有检查它的值-它只是检查它是否存在,然后返回整个对象。没有该功能,其余代码将运行,我们可以很清楚地看到它正在删除两个键: access_tokenscope

现在,如果我们在有参数和无参数的情况下调用此函数,我们可以检查输出中的差异。 (注意:我使用JSON.stringify,因为尝试从浏览器控制台复制/粘贴对象会导致一些问题)。
console.log(JSON.stringify(gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse()));
console.log(JSON.stringify(gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse(true)));

getAuthResponse()对象

{ "token_type":"Bearer", "login_hint":"<Huge mess of letters>", "expires_in":2112, "id_token":"<insert your ridiculously long string here>",...}



getAuthResponse(true)对象

{ "token_type":"Bearer", "access_token":"<an actual access token goes here>", "scope":"<whatever scopes you have authorized>", "login_hint":"<another mess of letters>", "expires_in":2112, "id_token":"<Insert your ridiculously long string here>", ...}



希望这对你们有帮助!

关于google-api - GoogleUser.getAuthResponse()不包含access_token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34804016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com