我是nodejs的新手,特别是在誓言中,不管怎样,我关注nodejs的googleapis,这就是我从现在开始编辑的
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页面复制过来,我做错了什么?
发布于 2016-12-12 18:14:10
你检查过响应正文了吗?"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);
// :(
}
})
我也有同样的问题,所以我开始查看内部的库代码,我发现了这个。有了这个,也许你可以找到你的问题所在。祝你好运;)
https://stackoverflow.com/questions/40957019
复制