使用Gmail API和Google API节点客户端出现错误500 backendError

Rya*_*yan 6 google-api-nodejs-client gmail-api

我正在尝试将新的Gmail APIGoogle API节点客户端配合使用.我从开发人员控制台创建了一个新项目,设置了一个新的"服务帐户"客户端ID,并启用了对API的访问.

作为概念证明,我只是想在我的收件箱中列出线程.当我为API资源管理器启用OAuth 2.0切换并输入我的电子邮件地址时,请求成功,我看到带有数据的JSON响应.

现在我尝试在Node中做同样的事情:

var googleapis = require('googleapis');

var SERVICE_ACCOUNT_EMAIL = '...SNIP...';

// generated by: openssl pkcs12 -in ...SNIP...p12 -out key.pem -nocerts -nodes
var SERVICE_ACCOUNT_KEY_FILE = 'key.pem';
var jwt = new googleapis.auth.JWT(
        SERVICE_ACCOUNT_EMAIL,
        SERVICE_ACCOUNT_KEY_FILE,
        null,
        ['https://www.googleapis.com/auth/gmail.readonly']);

googleapis
    .discover('gmail', 'v1')
    .execute(function(err, client) {

        jwt.authorize(function(err, result) {
            if(err) console.error(err);
            else console.log(result);

            client.gmail.users.threads.list()
                .withAuthClient(jwt)
                .execute(function(err, result) {
                    if(err) console.error(err);
                    else console.log(result);
            });
        });
    });
Run Code Online (Sandbox Code Playgroud)

首先,我打印authorize()调用的结果,看起来它返回一个令牌,所以我想我已经正确设置了所有OAuth的东西:

{ access_token: '...SNIP...',
  token_type: 'Bearer',
  expires_in: 1404277946,
  refresh_token: 'jwt-placeholder' }
Run Code Online (Sandbox Code Playgroud)

然后我尝试实际使用API​​,但是我收到一个错误:

{ errors: 
   [ { domain: 'global',
       reason: 'backendError',
       message: 'Backend Error' } ],
  code: 500,
  message: 'Backend Error' }
Run Code Online (Sandbox Code Playgroud)

在这一点上,我不知道还有什么可以尝试.我认为 OAuth的工作正常,因为我没有收到任何身份验证错误.我还认为 API本身正常运行,我的帐户很好,因为我可以通过API Explorer使用它.我没有看到任何迹象表明Node库也有问题.简而言之,我不知道问题是什么.有任何想法吗?

Rya*_*eys 0

您正在使用服务帐户来验证您对 GMail 的请求。据我所知,您的服务帐户不会有 Gmail,只有用户才有 GMail。因此,您需要与用户执行 OAuth2 流程(请参阅此处的示例)。