私はノードライブラリを使用してYouTubeデータAPIにリクエストしています。私はpassport
passport-youtube-v3
ライブラリを使用してユーザーを認証することから始めています。すべてうまく動作します。私は認証することができ、私はYouTubeのデータAPIへの許可された要求を行うことができます。しかし、(1-2h程度)一定時間後に資格証明書の有効期限が切れているか、単に無効になっているように見えると私は次のエラーを取得する:ノードgoogleapis:短い時間の後にエラー:invalid_request
{ 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ヶ月間使用しないうちに起こるべきではありません。また、私はトークンを無効にする可能性のあるリクエストを過度に作成していません。それでも私はこのようなアクセストークンのマニュアルTOKEリフレッシュを実装しようとした:私は正しくそれもこれを行うことは理にかなっている場合の、これを実装した場合
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 }
最初にエラーが発生した場合は、他にどのような問題がありますか?アクセストークンがすばやく期限切れになる可能性はありますか?もしそうなら、それを正しくリフレッシュするには?
ご協力いただきありがとうございます。
私は 'refresh_token'を使っているときに何が問題なのかよく分かりません。失敗した場合、' refresh_token'はもう有効ではありません。 [承認されたアプリリスト](https://myaccount.google.com/permissions)でアプリを取り消しましたか?あなたの以前の質問の場合、私はユーザーが一度保存された答えを掲示しました。 'refresh_token'の有効性はテストされていませんので、同じメソッドを使用している場合、トークンを取り消しても更新されません手動で –
[このサンプル](https://gist.github.com/bertrandmartel/64bf4bf1df8a4ba63301cfa202163c90)を試すことができます(私は[passport-google-auth]を使用します(https://github.com/jaredhanson/passport-google-oauth )代わりに –
あなたの助けてくれてありがとう!間違いがどこかにあったようだ。 – Flavio