2014-07-02 112 views
6

我正尝试使用新的Gmail APIGoogle API Node client。我从开发人员控制台创建了一个新项目,设置了一个新的“服务帐户”客户端ID,并启用了对API的访问。使用Gmail API和Google API错误500后端错误节点客户端

作为一个概念证明,我只是试图列出我的收件箱中的线程。当我为API explorer启用OAuth 2.0切换并输入我的电子邮件地址时,请求成功,我看到带有数据的JSON响应。

现在,我尝试做相同的节点:

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); 
      }); 
     }); 
    }); 

首先我打印authorize()调用,它看起来像它返回一个标记的结果,所以我觉得我所有的OAuth的东西正确安装:

{ access_token: '...SNIP...', 
    token_type: 'Bearer', 
    expires_in: 1404277946, 
    refresh_token: 'jwt-placeholder' } 

然后我尝试实际使用的API,但我得到一个错误:

{ errors: 
    [ { domain: 'global', 
     reason: 'backendError', 
     message: 'Backend Error' } ], 
    code: 500, 
    message: 'Backend Error' } 

在这一点上,我不知道还有什么要尝试。我认为 OAuth的东西工作正常,因为我没有得到任何认证错误。我也认为 API本身正在工作,我的帐户是好的,因为我可以通过API资源管理器使用它。我没有看到任何迹象表明Node库也有问题。总之,我不知道问题是什么。有任何想法吗?

回答

0

您正在使用服务帐户来验证您对GMail的请求。据我所知,您的服务帐户没有Gmail,只有用户拥有GMail。因此,您需要与用户(see here for example)一起执行OAuth2流程。

+1

嗯,这很有趣。我正在尝试做同样的事情 - 即在Gmail API中使用OAuth 2.0服务帐户,并且还遇到500后端错误。您是否有源代表说您不能在GMail API中使用服务帐户?我认为,因为这是通过用户的Google开发者控制台创建的,它会与该用户关联? – victorhooi

+0

是的,它说[这里](https://developers.google.com/gmail/api/auth/about-auth)认证是通过使用OAuth 2.0流认证用户完成的,并描述了通用认证流程,最终用户: 1.在开发过程中,在Google Developers Console中注册应用程序。 2.当应用程序启动时,请求用户授予他们Google帐户中数据的访问权限。 3.如果用户同意,您的应用程序请求并接收凭据以访问Gmail API。 4.刷新凭证(如有必要)。 –

相关问题