2016-12-04 23 views
0

イムnodejsの新機能とexpeciallyとにかく誓い にはnodejsためgoogleapisを以下IMとこれは私が完全に コードを取得NodejsのOAuthエラー

var fs = require('fs'); 
var readline = require('readline'); 
var google = require('googleapis'); 
var express = require('express'); 
var app = express(); 

var port = 3000; 

var OAuth2 = google.auth.OAuth2; 
var oauth2client; 



app.get('/', function(req, res){ 

    fs.readFile('client_secret.json', function processClientSecrets(err, content) { 
     if (err) { 
      console.log('Error loading client secret file: ' + err); 
      return; 
     } 
     // Authorize a client with the loaded credentials, then call the 
     // Gmail API. 
     var credentials = JSON.parse(content); 
     var clientSecret = credentials.web.client_secret; 
     var clientId = credentials.web.client_id; 
     var redirectUrl = credentials.web.redirect_uris; 

     oauth2client = new OAuth2( 
      clientId, 
      clientSecret, 
      redirectUrl 
     ); 

     var SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']; 

     var info = "Accedi a GMail" 

     var getCode = oauth2client.generateAuthUrl({ 
      // 'online' (default) or 'offline' (gets refresh_token) 
      access_type: 'offline', 

      // If you only need one scope you can pass it as string 
      scope: SCOPES 
     }); 

     res.send(info+"<br><br><button onclick='window.location.href=\""+ getCode +"\"'>Log in</button>"); 

    }); 
}); 


app.get("/code", function(req,res){ 
    var code = req.query.code; 
    res.send(code); 
    oauth2client.getToken(code, function (err, tokens) { 
    // Now tokens contains an access_token and an optional refresh_token. Save them. 
     if (!err) { 
      oauth2Client.setCredentials(tokens); 
      console.log(tokens); 
     } 
     else{ 
      console.log(err); 
     } 
    }); 
}); 

console.log('Server listen in port '+port+'. Connect to localhost'); 
app.listen(port); 

今ので、私はDITものですが、私はトークンのセクションに到着したとき私はちょうど私が間違っているんです何googleapisページ からそれをコピーした入手トークン機能

{ Error: invalid_request 
at Request._callback (C:\Users\Edoardo\node_modules\google-auth-library\lib\ 
transporters.js:81:15) 
at Request.self.callback (C:\Users\Edoardo\node_modules\google-auth-library\ 
node_modules\request\request.js:187:22) 
at emitTwo (events.js:106:13) 
at Request.emit (events.js:191:7) 
at Request.<anonymous> (C:\Users\Edoardo\node_modules\google-auth-library\no 
de_modules\request\request.js:1044:10) 
at emitOne (events.js:96:13) 
at Request.emit (events.js:188:7) 
at IncomingMessage.<anonymous> (C:\Users\Edoardo\node_modules\google-auth-li 
brary\node_modules\request\request.js:965:12) 
at emitNone (events.js:91:20) 
at IncomingMessage.emit (events.js:185:7) code: 400 } 

から無効な要求エラーがありますか?

答えて

0

レスポンスボディを確認しましたか? "error"と "error_description"は、あなたの問題の詳細を示します。通常、エラーが発生する可能性のあるパラメータまたはコードが欠落しています。 は、このようなあなたの入手トークンのコールバックに三番目のパラメータを追加します。

の変更を、このコード内でレスポンスボディを取得するために:

//response parameter added 
oauth2Client.getToken(codigo, function (err, tokens,response) { 
    if (!err) { 
     console.log(tokens); 
     console.log(response.body); 
     oauth2Client.setCredentials(tokens); 
     //DO something great 
    } else { 
     console.log(err); 
     console.log(response.body.error); 
     console.log(response.body.error_description); 
     // :(
    } 
}) 

oauth2client.getToken(code, function (err, tokens) { 
    if (!err) { 
     console.log(tokens); 
     console.log(response.body); 
     oauth2Client.setCredentials(tokens); 
     //DO something great 
    } else { 
     console.log(err); 
     console.log(response.body.error); 
     console.log(response.body.error_description); 
     // :(
    } 
}); 

を私が始めたので、私は同じ問題を抱えていました内部のライブラリコードを調べると、これが見つかりました。これで、おそらくあなたはあなたの問題が何かを見つけることができました。 幸運;)

+0

MIssingパラメータ:redirect_uri 私は今何を追加しなければなりませんか? – Machine1104

+0

OAtuh2コンストラクタでは、3番目のパラメータは、ログイン処理が完了した後のurlリダイレクトです。このような何か:\t \t \tするvar oauth2Client =新しいのOAuth2( \t \t \t \t \t config.GOOGLE_CLIENT、 \t \t \t \t \t config.GOOGLE_SECRET、 \t \t \t \t \t 'www.asdfasdf.com/landing.htmll' \t \t \t \t); – hernanBeiza