2017-06-23 3 views
1

私はノードライブラリを使用してYouTubeデータAPIにリクエストしています。私はpassportpassport-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 } 

最初にエラーが発生した場合は、他にどのような問題がありますか?アクセストークンがすばやく期限切れになる可能性はありますか?もしそうなら、それを正しくリフレッシュするには?

ご協力いただきありがとうございます。

+0

私は 'refresh_token'を使っているときに何が問題なのかよく分かりません。失敗した場合、' refresh_token'はもう有効ではありません。 [承認されたアプリリスト](https://myaccount.google.com/permissions)でアプリを取り消しましたか?あなたの以前の質問の場合、私はユーザーが一度保存された答えを掲示しました。 'refresh_token'の有効性はテストされていませんので、同じメソッドを使用している場合、トークンを取り消しても更新されません手動で –

+0

[このサンプル](https://gist.github.com/bertrandmartel/64bf4bf1df8a4ba63301cfa202163c90)を試すことができます(私は[passport-google-auth]を使用します(https://github.com/jaredhanson/passport-google-oauth )代わりに –

+0

あなたの助けてくれてありがとう!間違いがどこかにあったようだ。 – Flavio

答えて

1

問題は、OAuth2を正しくインスタンス化しなかったようです。私は作成時にコンストラクタに私のアプリの資格情報を渡さなかった。すべてが今働くようです。

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

私はまだ持っている唯一の混乱は、それが上記のエラーをスローし始めた前に、それはリクエストのカップルのために働いた理由についてです。

関連する問題