【问题标题】:Get Resource Calendar with Directory API使用 Directory API 获取资源日历
【发布时间】:2020-03-29 08:58:50
【问题描述】:

我确实尝试过,但无法自己弄清楚如何使用 Directory API 检索资源日历的数据。

我想要什么:

  • 使用具有域范围委派的服务帐户检索我公司资源日历的数据

我有什么:

  • 具有域范围委派的服务帐户 (+ credentials.json)

  • 我公司资源日历的日历ID

我是非管理员用户,据我所知,服务帐户必须模拟用户。 我是否需要成为管理员用户才能管理和查看资源日历的数据并与服务帐户共享? 我使用 jwtClient 进行授权,但我不知道是否必须使用 Directory API、Google Calendar API 或两者才能使其工作。

我首先尝试使用 Google Calendar API,但它不起作用,现在我想我必须使用 Directory API 获取资源日历。 这就是我目前所拥有的:

let express = require('express');
let app = express();

app.set('view engine', 'ejs');

let {google} = require('googleapis');
const calendar = google.calendar('v3');

const port = 3000;
const key = require('./credentials.json');
const jwtClient = new google.auth.JWT(
    key.client_email,
    null,
    key.private_key,
    [ 'https://www.googleapis.com/auth/calendar'],
    null
);

jwtClient.authorize(function(err, tokens) {
    if (err) {
        console.log(err);
    } else {
        console.log("Authorization worked!");
        console.log(tokens);
    }
});

app.get('/', function(req, res) {
    calendar.events.list({
        auth: jwtClient,
        calendarId: 'xxxx@resourcexxx.com',
        timeMin: (new Date()).toISOString(),
        maxResults: 5,
        singleEvents: true,
        orderBy: 'startTime'
    }, function(err, resp) {
        res.json(resp);
    });
});

app.use(express.static('public'));

app.listen(port, function(err){
    if (!err) {
        console.log("App is running on port", port);
    } else {
        console.log(JSON.stringify(err));
    }
});

任何帮助将不胜感激。提前致谢!

【问题讨论】:

  • 请编辑您的问题并包含您的代码并描述您在使用该代码时遇到的问题
  • 你好,安。您能否: 1. 提供您已经使用过的代码,与您刚刚创建的问题相关。 2. 准确描述您想从公司日历中获取哪些数据。这将有助于我们知道要给出什么答案。谢谢!
  • 你是对的。我编辑了该部分,但无法使用资源日历的 calendar.events.list 方法出现问题。

标签: node.js google-calendar-api google-admin-sdk


【解决方案1】:

我是非管理员用户,据我所知,服务帐户必须模拟用户。我是否需要成为管理员用户才能管理和查看资源日历的数据并与服务帐户共享?

  • 服务帐户可以模拟用户,前提是他们启用了域范围的委派。没必要。

    服务帐户的行为类似于“普通”帐户 - 它们对资源拥有自己的权限。这意味着,如果您想从该帐户获取特定日历的数据,则必须授予其查看权限。如果您希望使用服务帐户对其进行编辑,则必须授予帐户编辑权限。您可以像对待任何其他用户一样执行此操作,不同之处在于您必须使用服务帐户的电子邮件地址(您可以在开发者控制台中找到)来引用它。

    如果您使用启用了域范围身份验证的服务帐户,则在进行身份验证时,您可以指定一个“主题”(您域的现有用户)来模拟。成功验证后,执行的每个操作都将被执行,就好像“主题”帐户是执行它们的帐户一样 - 它将使用该用户的权限。

我使用 jwtClient 进行授权,但我不知道是否必须使用 Directory API、Google Calendar API 或同时使用两者才能使其工作。

  • 由于您是从日历中检索数据(而不是任何用户信息),您只需使用Google Calendar API

我想要什么:使用具有域范围委派的服务帐户检索我公司资源日历的数据

  • 在您的情况下 - 检索数据 - 您可以简单地与您的服务帐户共享该日历。之后,无需使用域范围的委派,它将能够使用 calendar.events.list 使用您提供的相同代码检索日历中存在的事件及其详细信息。

参考

【讨论】:

    猜你喜欢
    • 2016-03-25
    • 2014-01-20
    • 1970-01-01
    • 2015-03-01
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    相关资源
    最近更新 更多