Ore*_*ren 8 javascript node.js google-cloud-platform gmail-api google-auth-library-nodejs
我想编写一个应用程序来处理我的一些以某种方式标记的 Gmail 电子邮件。
这里的示例代码为我的代码提供了一个起点(我使用 Promise 而不是 async wait 重写了代码):
'use strict';
const path = require('path');
const { google } = require('googleapis');
const { authenticate } = require('@google-cloud/local-auth');
authenticate({
keyfilePath: path.join(__dirname, 'key.json'),
scopes: [
'https://www.googleapis.com/auth/gmail.readonly',
],
}).then(auth => {
google.options({ auth })
gmail.users.messages.list({
userId: "me",
}).then((res) => {
console.log(res.data)
}).catch(err => {
console.log(err)
})
}).catch(err => {
console.log(err);
})
Run Code Online (Sandbox Code Playgroud)
以下是我到目前为止所采取的步骤:
key.jsonGOOGLE_APPLICATION_CREDENTIALS="$(pwd)/key.json" node index.js
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误:
TypeError: Cannot read property 'redirect_uris' of undefined
at authenticate (/home/user/dev/gmail-processor/node_modules/@google-cloud/local-auth/build/src/index.js:46:15)
at Object.<anonymous> (/home/user/dev/gmail-processor/index.js:7:1)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
Run Code Online (Sandbox Code Playgroud)
看起来它需要带有重定向 url 的 oauth 凭据。GOOGLE_APPLICATION_CREDENTIALS另外,当我keyfilePath调用时包含时,我导出似乎是多余的authenticate。我做错了什么,如何让这段代码成功执行?
我通过使用以下方法解决了这个问题:
const auth = new google.auth.GoogleAuth({
keyFile: path.join(__dirname, 'key.json'),
scopes: ['https://www.googleapis.com/auth/gmail.readonly'],
});
Run Code Online (Sandbox Code Playgroud)
代替:
const auth = await authenticate({
keyfilePath: path.join(__dirname, 'key.json'),
scopes: ['https://www.googleapis.com/auth/gmail.readonly'],
});
Run Code Online (Sandbox Code Playgroud)
在您的key.json文件中,您必须传递您的redirect_uris:
{
...
"web": {
// put your callback here:
"redirect_uris": ["http://localhost:3000/oauth2callback"]
}
}
Run Code Online (Sandbox Code Playgroud)
之后,它应该可以工作。不过,文档对此并不清楚。我还在想办法。
编辑1:
好吧,我明白了...
转到Google Cloud Console 上的凭据部分,创建 OAuth 2.0 客户端 ID(如果尚未创建)并下载 JSON 文件。使用该 JSON 文件作为您的keys.json. 它对我有用:)
| 归档时间: |
|
| 查看次数: |
5113 次 |
| 最近记录: |