Node googleapis: getting Error: invalid_request after short period of time
Node googleapis: getting Error: invalid_request after short period of time
我正在使用节点 googleapis
库向 YouTube 数据发出请求 api。我开始使用 passport
passport-youtube-v3
库对用户进行身份验证。一切正常。我可以进行身份验证,并且可以对 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' } ] }
我知道授权令牌会在一段时间后过期。但根据 the documentation,这不应在 6 个月不活动之前发生。此外,我不会发出过多可能导致令牌无效的请求。尽管如此,我还是尝试像这样实现访问令牌的手动令牌刷新:
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
。我没有在创建时将我的应用程序的凭据传递给构造函数。现在似乎一切正常。
let oauth2Client = new OAuth2(
clientID,
clientSecret,
callbackURL
);
我仍然感到唯一困惑的是,为什么它在开始抛出上述错误之前对几个请求有效。
我正在使用节点 googleapis
库向 YouTube 数据发出请求 api。我开始使用 passport
passport-youtube-v3
库对用户进行身份验证。一切正常。我可以进行身份验证,并且可以对 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' } ] }
我知道授权令牌会在一段时间后过期。但根据 the documentation,这不应在 6 个月不活动之前发生。此外,我不会发出过多可能导致令牌无效的请求。尽管如此,我还是尝试像这样实现访问令牌的手动令牌刷新:
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
。我没有在创建时将我的应用程序的凭据传递给构造函数。现在似乎一切正常。
let oauth2Client = new OAuth2(
clientID,
clientSecret,
callbackURL
);
我仍然感到唯一困惑的是,为什么它在开始抛出上述错误之前对几个请求有效。