我如何通过服务帐户(Google Calendar API)获取资源日历的事件?

问题描述 投票:0回答:1

我编写了一个Node / Express应用程序,并希望通过服务帐户从资源日历中访问事件。当我使用个人日历时,它可以正常工作,但使用资源日历时,它会给我空白页。

这就是我要做的。我必须进行哪些更改才能使其正常工作?

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

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) {
    if (!err) {
        console.log("Authorization worked!");
    }
});

const calendarID = '[email protected]';

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

});

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

任何帮助将不胜感激:)

node.js google-calendar-api
1个回答
0
投票

服务帐户的工作方式与普通帐户一样,它们拥有自己的权限,除非明确授予日历访问权限,否则它们无法访问日历的信息。

为了克服此问题,您可以:

  1. 将日历共享到您的服务帐户。您只需与任何普通用户共享它,尽管分配了服务帐户的电子邮件。

  2. 如果您使用的是G Suite(不是普通/消费者帐户),请使用Domain-Wide delegation。您可以在提供的超链接中了解更多信息。此功能使您可以“模拟”域的另一个用户,这不仅使您可以检索事件,还可以根据需要修改日历和事件,因为您对其拥有“所有者”权限。

© www.soinside.com 2019 - 2024. All rights reserved.