无法使用 Javascript 在 Google 日历上插入活动(已与服务帐户共享)
Can't insert events on Google Calendar with Javascript (already shared with service account)
我正在尝试使用 Google 日历创建一个新事件,我目前正在使用他们的 Javascript API。当我尝试执行请求时,我得到的响应是 403 - 禁止。我使用 Google Developers page 上可用的 API Explorer 测试了相同的请求,它工作正常。
在互联网上搜索问题后,我找到了一些解决方案,其中有人说我需要与我创建的 Google 服务帐户共享我的日历。我做到了,但还是不行。你们知道我该如何解决吗?
编辑
初始化:
gapi.client.init({
discoveryDocs: DISCOVERY_DOCS,
clientId: CLIENT_ID,
scope: SCOPES
}).then(function () {
if (!(gapi.auth2.getAuthInstance().isSignedIn.get())) {
handleAuthClick();
}
else {
getAvailableTimes();
}
// Listen for sign-in state changes.
// gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);
});
插入动作:
modal.result.then(function (interview) {
var eventRequest = gapi.client.calendar.events.insert({
calendarId: interview.recruiter.email,
sendNotifications: true,
resource: {
summary: 'Interview with ' + interview.candidate.name,
description: '',
start: {
dateTime: interview.start
},
end: {
dateTime: interview.end
},
attendees: [
{email: interview.recruiter.email},
{email: interview.candidate.email}
],
reminders: {
useDefault: false,
overrides: [
{method: 'email', minutes: 60 * 24},
{method: 'email', minutes: 60},
{method: 'popup', minutes: 60},
{method: 'email', minutes: 10},
{method: 'popup', minutes: 10}
]
}
}
});
})
服务帐户不是典型的常规帐户。您提到的 Events.insert 页面中的示例未使用服务帐户。它使用您的常规帐户。服务帐户需要进一步设置,例如:
- 日历 API 已在 Google 开发者控制台中启用
- 已创建服务帐户
- 存储 p12 密钥并将其存储在您稍后会用到的项目文件夹中。
你也可以检查这个SO post for added reference and this official Service Accounts doc for Google APIs。
也在网上搜索解决方法的时候,终于找到了导致这个问题的原因。您无法像我使用的那样使用 Javascript API 连接服务帐户。 :(
我正在尝试使用 Google 日历创建一个新事件,我目前正在使用他们的 Javascript API。当我尝试执行请求时,我得到的响应是 403 - 禁止。我使用 Google Developers page 上可用的 API Explorer 测试了相同的请求,它工作正常。
在互联网上搜索问题后,我找到了一些解决方案,其中有人说我需要与我创建的 Google 服务帐户共享我的日历。我做到了,但还是不行。你们知道我该如何解决吗?
编辑
初始化:
gapi.client.init({
discoveryDocs: DISCOVERY_DOCS,
clientId: CLIENT_ID,
scope: SCOPES
}).then(function () {
if (!(gapi.auth2.getAuthInstance().isSignedIn.get())) {
handleAuthClick();
}
else {
getAvailableTimes();
}
// Listen for sign-in state changes.
// gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);
});
插入动作:
modal.result.then(function (interview) {
var eventRequest = gapi.client.calendar.events.insert({
calendarId: interview.recruiter.email,
sendNotifications: true,
resource: {
summary: 'Interview with ' + interview.candidate.name,
description: '',
start: {
dateTime: interview.start
},
end: {
dateTime: interview.end
},
attendees: [
{email: interview.recruiter.email},
{email: interview.candidate.email}
],
reminders: {
useDefault: false,
overrides: [
{method: 'email', minutes: 60 * 24},
{method: 'email', minutes: 60},
{method: 'popup', minutes: 60},
{method: 'email', minutes: 10},
{method: 'popup', minutes: 10}
]
}
}
});
})
服务帐户不是典型的常规帐户。您提到的 Events.insert 页面中的示例未使用服务帐户。它使用您的常规帐户。服务帐户需要进一步设置,例如:
- 日历 API 已在 Google 开发者控制台中启用
- 已创建服务帐户
- 存储 p12 密钥并将其存储在您稍后会用到的项目文件夹中。
你也可以检查这个SO post for added reference and this official Service Accounts doc for Google APIs。
也在网上搜索解决方法的时候,终于找到了导致这个问题的原因。您无法像我使用的那样使用 Javascript API 连接服务帐户。 :(