【问题标题】:Javascript: Google Calender + gapi: service accountJavascript:谷歌日历 + api:服务帐户
【发布时间】:2019-06-10 20:03:46
【问题描述】:

我的应用使用 Firebase 让用户登录,并且他们可以访问一个日历,该日历是专门作为一个通用日历创建的,用于添加和删除预订。

可以说,该应用为此目的拥有自己的 gmail 地址。该应用程序通过 google API(gapi 客户端)访问。

为了让用户能够与日历进行交互,我发现我只能使用日历/应用程序的服务帐户。

到目前为止,我设法:

  • 为服务帐号创建服务密钥,
  • 与服务帐户“虚拟”用户共享日历,
  • 使用该服务密钥(证书)创建 JWT 令牌(使用 jsrsasign 库),
  • 发出 POST 请求以获取 gapi 的访问令牌,
  • 初始化 gapi 身份验证和客户端,并通过 gapi 访问日历

现在,当我要检索 google 日历事件时,我确实得到了成功的响应,但事件数组是空的,即使共享日历中有可用的测试事件。

响应如下所示:

{
 "kind": "calendar#events",
 "etag": "\"pqef3g4h5j6j0g\"",
 "summary": "my_app_email@appspot.gserviceaccount.com",
 "updated": "2019-01-15T21:14:05.029Z",
 "timeZone": "UTC",
 "accessRole": "owner",
 "defaultReminders": [],
 "items": []
}

Stackoverflow 上有一些关于此的主题,但没有一个提供有用的信息,或者它们适用于 Pythin / PHP。

我希望有人可以为 Javascript 提供建议...

【问题讨论】:

    标签: javascript calendar service-accounts google-api-js-client


    【解决方案1】:

    我解决了这个问题...问题出在获取事件时的 gapi 请求中。 我使用了错误的 calendarId。我将其值设置为默认的“主要”,但要使用的实际 calendarId 可以在 Google Calendar Settings >> Integrate Calendar 下找到。在我的设置中,calendarId 是关联帐户的电子邮件地址。

    所以 gapi 请求看起来像这样:

    const fetchTimeLimit = new Date(2019, 0, 1).toISOString();
    
    let events = await gapi.client.calendar.events.list({
      calendarId: 'calendar_email@gmail.com',
      timeMin: fetchTimeLimit,
      showDeleted: false,
      singleEvents: true,
      maxResults: 300,
      orderBy: 'startTime'
    })
    .then(response => {  ........etc
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-24
      • 2016-09-30
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      相关资源
      最近更新 更多