【问题标题】:Google Calendar API: writer access error when setting up Google calendar event create on Google business accountGoogle 日历 API:在 Google 企业帐户上设置 Google 日历事件创建时写入者访问错误
【发布时间】:2021-01-03 21:17:12
【问题描述】:

我在我的 Angular 9 Web 应用程序中使用 Google 日历 API,并尝试在我的 G Suite 域中的 Google 日历上创建事件

在 G Suite 管理控制台中,我已为 https://www.googleapis.com/auth/calendarhttps://www.googleapis.com/auth/calendar.events 范围的服务帐号授予权限

我在自己的帐户下创建了日历,并添加了具有“更改活动”权限的服务帐户

注意:我尝试了普通的 gmail 帐户。这是工作。但是当我尝试使用 google 企业帐户时,我遇到了上述问题(例如设置 Google 日历事件创建时的作家访问错误)。

我正在使用此代码保存日历事件:

请在下面找到屏幕截图。

const jwtClient = new google.auth.JWT(
    GOOGLE_CLIENT_EMAIL,
    null,
    GOOGLE_PRIVATE_KEY,
    ['https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/calendar.events']
);
const calendar = google.calendar({
    version: 'v3',
    project: GOOGLE_PROJECT_NUMBER,
    auth: jwtClient
});
var appointment_data = {
    summary: 'xyz',
    location: 'Location info',
    description: 'Some description',
    start: {
        'dateTime': dataObj.appt_startdate_time,
        'timeZone': dataObj.appt_timeZone,
    },
    end: {
        'dateTime': dataObj.appt_enddate_time,
        'timeZone': dataObj.appt_timeZone,
    },
    attendees: [
        {
            "displayName": 'Xyz',
            "email": 'xyz@gmail.com'
        }
    ]
}
calendar.events.insert({
    calendarId: GOOGLE_CALENDAR_ID,
    resource: appointment_data,
}, function (err, event) {
    if (err) {
        console.log('There was an error contacting the Calendar service: ' + err);
        return;
    }
})

【问题讨论】:

  • 请添加您用于创建事件和验证服务帐户的代码。
  • const jwtClient = new google.auth.JWT(GOOGLE_CLIENT_EMAIL, null, GOOGLE_PRIVATE_KEY, ['googleapis.com/auth/calendar', 'googleapis.com/auth/calendar.events']); const calendar = google.calendar({ version: 'v3', project: GOOGLE_PROJECT_NUMBER, auth: jwtClient });
  • var 约会数据 = { 摘要:'xyz',位置:'位置信息',描述:'一些描述',开始:{'dateTime':dataObj.appt_startdate_time,'timeZone':dataObj.appt_timeZone , }, end: { 'dateTime': dataObj.appt_enddate_time, 'timeZone': dataObj.appt_timeZone, }, 参加者: [ { "displayName": 'Xyz', "email": 'xyz@gmail.com' } ] }
  • calendar.events.insert({ calendarId: GOOGLE_CALENDAR_ID, resource:ointment_data, }, function (err, event) { if (err) { console.log('联系日历服务时出错: ' + err); return; } })
  • 请在问题中添加。 cmets 真的很难阅读和理解。谢谢

标签: angular google-api calendar google-calendar-api


【解决方案1】:

解决方案

没有将模拟电子邮件地址添加到 JWT 构造函数方法。

建议修改

您必须在创建活动时添加您想要模拟的域用户的电子邮件地址:

var key = require('/path/to/service-account-credentials.json');

const SCOPES = ['https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/calendar.events'];

var jwtClient = new google.auth.JWT(
    key.client_email,
    null,
    key.private_key,
    SCOPES,
    'impersonating-email-address' // Add this parameter
);

现在,如果您正确遵循这些instructions,它应该可以完美运行。

参考文献

Calendary API Service Accounts

【讨论】:

  • 嗨亚历山德罗,我可以在哪里获得“模拟电子邮件地址”。你能帮帮我吗?抱歉回复晚了。
  • 仅供参考,在我的企业帐户中,我无法选择“对事件进行更改”选项。在与特定人员共享提示中。但是在普通 Gmail 帐户中启用选项。
  • 它现在解决了,我点击了这个链接:support.google.com/calendar/thread/605495?hl=en
  • 当我添加“模拟电子邮件地址”时,我收到错误 Error: unauthorized_client: Client is unauthorized to retrieve access tokens using this method, or client not authorized for any of the scopes requested.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
相关资源
最近更新 更多