2016-12-04 72 views
0

中的NodeJS即時通訊新和expecially在宣誓 反正即時通訊以下googleapis爲的NodeJS,這就是我的DIT因爲現在的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); 

我得到的代碼完全 但是當我在令牌部分到達我有一個無效的請求錯誤從爲gettoken功能

{ 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 } 

我只是複製它從googleapis頁 我該怎麼辦錯了嗎?

回答

0

您是否檢查過響應正文? 「error」和「error_description」可以給你更多關於你的問題的細節。通常會丟失一些參數或之前使用的代碼,以至於可能會導致錯誤消失。在你的代碼

更改本作得到響應體: 第三個參數添加到您爲gettoken回調這樣

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); 
     // :(
    } 
}); 

//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); 
     // :(
    } 
}) 

我有同樣的問題,所以我開始看看內部庫代碼,我發現這一點。有了這個,也許你可以找到你的問題。 祝你好運;)

+0

MIssing參數:redirect_uri 我現在要添加什麼? – Machine1104

+0

在您的OAtuh2構造函數中,第三個參數是登錄過程完成後的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