【问题标题】:How do I use Google APIs as a specific user server-side? Node.js如何将 Google API 用作特定用户服务器端?节点.js
【发布时间】:2016-06-07 07:43:53
【问题描述】:

我在一个网站上有一个表单,需要检查我的日历以查看可用的时间,然后在提交后它会发送一封电子邮件。

我在 API 控制台中创建了一个服务帐户,但我不知道如何授予它访问我帐户的权限。

这是我目前所做的,尝试列出我的 Gmail 帐户的标签作为测试。

var google = require( 'googleapis' );
var gmail = google.gmail('v1');

var key = require('../client_secret.json');

var authClient = new google.auth.JWT(
    key.client_email,
    null,
    key.private_key,
    ['https://mail.google.com/'],
    '****@gmail.com');

authClient.authorize(function (err, tokens) {
  if (err) {
    return console.log(err);
  }

  gmail.users.labels.list({
    auth: authClient,
    userId: '****@gmail.com'
  }, function (err, resp) {
    if (err) {
      return console.log(err);
    }

    console.log(resp);
  });
});

当我运行脚本时,我得到:

[Error: unauthorized_client]

编辑:

我还尝试了另一个使用 oauth 的身份验证流程,它会将您带到典型的权限屏幕,要求您允许访问“项目名称”到“您放置的任何范围”。然后我可以使用访问令牌发出请求,一切都很好......但这感觉不对,因为我不希望任何其他用户授权。我可以使用路由来授权“应用程序”1 次,然后禁用该页面,使其无法再次访问……感觉有点骇人听闻。

【问题讨论】:

    标签: javascript node.js google-api google-api-nodejs-client


    【解决方案1】:

    我已经部分解决了我的问题;至少,我已经让我的问题中的例子起作用了。

    在开发者控制台中,我必须编辑我的服务帐户并选中一个框以启用“域范围的委派”。

    您转到您的服务帐户,单击服务帐户右侧的小三点菜单图标,单击编辑,然后在弹出对话框中有一个您需要选中的复选框。

    我之前看到过有关域范围委派的一些内容,但在那个示例中,他们说要转到您的 Google Apps 帐户,而我没有,所以我认为这与我无关,但在修补之后在开发者控制台中,我发现该复选框和上面的 Gmail 示例以及 Gmail API 的其他部分(包括从我的收件箱中读取邮件)都有效。

    但是,我尝试向 Calendar API 发出请求,但我收到了一个错误,但我认为这需要一个不同的问题。

    【讨论】:

      猜你喜欢
      • 2016-06-20
      • 2014-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      相关资源
      最近更新 更多