手动使用Google日历API v3认证用户账户

1 投票
2 回答
1216 浏览
提问于 2025-04-17 09:42

我想做的事情:

我希望我的网站上已经登录并获得授权的用户,可以使用一个表单来创建日历事件,这个功能是通过谷歌日历的API实现的。

我之前通过谷歌日历API v2成功实现了这一点,方法是手动认证我的谷歌账号,具体步骤如下:

calendar_service = gdata.calendar.service.CalendarService()
calendar_service.email = 'email@site.com'
calendar_service.password = 'password'
calendar_service.source = 'Calendar'
calendar_service.ProgrammaticLogin()

然后我可以把我网站表单中的POST数据传入,利用这个API创建事件,但现在我对如何使用API的V3版本感到困惑。

我已经阅读了相关文档,并尝试实现以下内容:

created_event = service.events().insert(calendarId='primary', body=event).execute()

但是这需要创建一个service对象,而这又需要通过OAuth 2.0进行账号认证,这并不是我想要的。我需要手动认证我自己的日历,而不是询问用户我的应用是否可以访问他们的日历。

我相信我可能遗漏了一些基本的逻辑,或者有一些错误的假设。如果有人能给我指个方向,我将非常感激。

2 个回答

0

@Ben - 你可以通过两种方式创建service对象,一种是用密钥和密码的组合,另一种是使用服务账户,这种情况下你需要用电子邮件和证书的组合,并通过prn参数来指定你想要操作的用户。这两种方法都需要在你的API控制台中注册。

如果你使用服务账户,只需在prn参数中填写你的电子邮件地址,就可以把事件插入到你的日历中。插入的语句保持不变,因为你是在你的账户上进行操作。

credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key,
  scope='https://www.googleapis.com/auth/calendar', prn='you@domain.com')
...

created_event = service.events().insert(calendarId='primary', body=event).execute()

这里有一个例子: https://developers.google.com/drive/delegation

1

你需要使用OAuth来授权你的代码访问你自己的日历; 一旦你完成这个步骤,你就会得到一个可以保存的令牌。当你的代码再次运行时,它应该重新使用这个令牌来连接到你的日历。用户不会被要求再次验证,但这个令牌可能会不时被更新。

我不能提供任何代码,因为我个人非常讨厌OAuth :(

撰写回答