Node googleapis:在短时间内获取错误:invalid_request

我正在使用节点googleapis库向youtube数据api发出请求。 我开始使用passportauthentication用户passport-youtube-v3库。 一切工作正常。 我可以进行身份​​validation,并且可以向YouTube数据API提出授权请求。 但经过一段时间(大约1-2小时),证书似乎已经过期或者变得无效,并且出现以下错误:

 { Error: Invalid Credentials at Request._callback (/Users/flavio/Code/BA/node_modules/google-auth-library/lib/transporters.js:85:15) at Request.self.callback (/Users/flavio/Code/BA/node_modules/request/request.js:188:22) at emitTwo (events.js:106:13) at Request.emit (events.js:191:7) at Request.<anonymous> (/Users/flavio/Code/BA/node_modules/request/request.js:1171:10) at emitOne (events.js:96:13) at Request.emit (events.js:188:7) at IncomingMessage.<anonymous> (/Users/flavio/Code/BA/node_modules/request/request.js:1091:12) at IncomingMessage.g (events.js:286:16) at emitNone (events.js:91:20) at IncomingMessage.emit (events.js:185:7) at endReadableNT (_stream_readable.js:926:12) at _combinedTickCallback (internal/process/next_tick.js:74:11) at process._tickCallback (internal/process/next_tick.js:98:9) code: 401, errors: [ { domain: 'global', reason: 'authError', message: 'Invalid Credentials', locationType: 'header', location: 'Authorization' } ] } 

我了解,授权令牌会在一段时间后失效。 但根据文件,这不应该发生在6个月的不活动之前。 此外,我并没有提出过多的请求,可能导致令牌无效。 尽pipe如此,我试图实现手动托pipe刷新访问令牌,如下所示:

 const fetch = (user, ressource, operation, opts) => { let oauth2Client = new OAuth2(); let client = google.youtube({ version: 'v3',auth: oauth2Client })[ressource][operation]; oauth2Client.credentials = { access_token: user.youtube.token, refresh_token: user.youtube.refreshToken }; return new Promise((success, failure) => { client(opts, function(err, data, response) { if (err) if(err.code === 401) oauth2Client.refreshAccessToken(function(err, tokens) { console.log(err); }); else failure(err); if (data) success(data); }); }); } 

我不确定是否正确实施了这个,如果这样做是有道理的。 我得到以下错误:

 { Error: invalid_request at Request._callback (/Users/flavio/Code/BA/node_modules/google-auth-library/lib/transporters.js:81:15) at Request.self.callback (/Users/flavio/Code/BA/node_modules/request/request.js:188:22) at emitTwo (events.js:106:13) at Request.emit (events.js:191:7) at Request.<anonymous> (/Users/flavio/Code/BA/node_modules/request/request.js:1171:10) at emitOne (events.js:96:13) at Request.emit (events.js:188:7) at IncomingMessage.<anonymous> (/Users/flavio/Code/BA/node_modules/request/request.js:1091:12) at IncomingMessage.g (events.js:286:16) at emitNone (events.js:91:20) at IncomingMessage.emit (events.js:185:7) at endReadableNT (_stream_readable.js:926:12) at _combinedTickCallback (internal/process/next_tick.js:74:11) at process._tickCallback (internal/process/next_tick.js:98:9) code: 400 } 

得到第一个错误还有什么可能是问题? 访问令牌可能过期这么快吗? 如果是这样,我该如何正确刷新它?

任何帮助是极大的赞赏!

看来问题是我没有正确实例化OAuth2 。 创build时,我没有将我的应用程序的凭据传递给构造函数。 一切似乎现在工作。

 let oauth2Client = new OAuth2( clientID, clientSecret, callbackURL ); 

我还有的唯一困惑是为什么在开始抛出上面提到的错误之前,它为了一些请求而工作。