通过云端function访问Gmail API
我正在尝试构build一个响应Gmail邮件发送邮件的电子邮件parsing器。 我目前能够接收和parsingpubsub消息并提取historyId,但我无法validation我的请求到gmail api。 这是我到现在为止:
//function defined outside the scope of the main function //used to create auth client function getAuthClient(event, callback) { var GoogleAuth = require('google-auth-library'); var authFactory = new GoogleAuth(); authFactory.getApplicationDefault(function (err, authClient) { if (err) { console.log('Unable to get application default credentials.'); callback(err); return; } // Create the oAuth scopes you need if (authClient.createScopedRequired && authClient.createScopedRequired()) { console.log('creating scoped client'); authClient = authClient.createScoped([ 'https://mail.google.com/' ]); } callback(null, authClient); }); } exports.gmailParser = function gmailParser (event, callback) { var path = require('path'); var base64 = require('base-64'); // Set your service account key file into the environment for the auth lib to pick up process.env['GOOGLE_APPLICATION_CREDENTIALS'] = path.resolve(__dirname, 'auth_credentials.json'); console.log(process.env['GOOGLE_APPLICATION_CREDENTIALS']); console.log(__dirname); //parse pubsub message var pubsubMessage = event.data; var baseMessage = pubsubMessage.data; var decodedMessage = base64.decode(baseMessage); var messageJSON = JSON.parse(decodedMessage); // Extract emailAddress and historyId from gmail pubsub message var historyId = messageJSON.historyId; var email = messageJSON.emailAddress; getAuthClient(null, function(err, authClient) { //import necessary libraries var google = require('googleapis'); var gmail = google.gmail('v1'); if(err) { callback(err); } // Construct a params object var params = { userId: email, startHistoryId: historyId }; //Attempt to call gmail api. This is where the error occurs. gmail.users.history.list(params, function(error, response) { if (error) { console.log('Encountered error', error); callback(error); } else { console.log('Response', response); callback(response); } }); }); };
代码运行成功,但我得到以下错误:
"Error: Login Required at Request._callback (/user_code/node_modules/googleapis/node_modules/google-auth-library/lib/transporters.js:85:15) at Request.self.callback (/user_code/node_modules/googleapis/node_modules/request/request.js:188:22) at emitTwo (events.js:106:13) at Request.emit (events.js:191:7) at Request.<anonymous> (/user_code/node_modules/googleapis/node_modules/request/request.js:1171:10) at emitOne (events.js:96:13) at Request.emit (events.js:188:7) at IncomingMessage.<anonymous> (/user_code/node_modules/googleapis/node_modules/request/request.js:1091:12) at IncomingMessage.g (events.js:291:16) at emitNone (events.js:91:20)"
我已经尝试将authClient添加到param对象,但它返回一个“错误的请求”错误。 我试着改变导入的顺序,创build了新的凭据,但是我一直没能find任何地方。 如果任何人有任何指针,将不胜感激。
- 使用从客户端接收到的谷歌授权代码在服务器端获取访问令牌javascript(nodejs)
- 节点JS – Youtube API是空白的
- 获取Google Drive NodeJS客户端的上传进度?
- browserify错误:http.createServer不是一个函数
- 如何获得谷歌+用户configuration文件的细节,给出访问令牌和刷新令牌
- Google API NodeJS:calendar.events.watch获取错误push.webhookUrlNotHttps或pushWebhookBadDomain
- 如何撤销由OAuth从谷歌提供的令牌? 的NodeJS
- NodeJS JWT Sign.sign TypeError:不是缓冲区
- nodejs googleapis,authClient.request不是一个函数