【问题标题】:Manually authenticate my user account with Google Calendar API v3使用 Google Calendar API v3 手动验证我的用户帐户
【发布时间】:2012-01-06 20:30:36
【问题描述】:

我正在尝试做的事情:

允许在我的网站上通过身份验证和授权的用户使用允许他们使用 Google 日历 API 在我的日历上创建活动的表单。

我可以通过 Google Calendar API v2 通过手动验证我的 Google 帐户来完成此操作:

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 进行帐户身份验证,这不是我想要完成的。我需要手动验证我自己的日历,而不是询问用户我的应用程序是否可以访问他们的日历。

我确定我遗漏了一些基本逻辑或做出了一些错误的假设。任何正确方向的帮助将不胜感激。

【问题讨论】:

    标签: python google-api google-calendar-api


    【解决方案1】:

    您必须使用 OAuth 授权 您的代码 访问您自己的日历;一旦你这样做了,你会得到一个你可以保留的令牌。当您的代码再次运行时,它应该重新使用令牌来连接到 您的 日历。用户不会受到挑战,但令牌可能会不时刷新。

    无法推荐任何代码,因为我个人非常讨厌 OAuth :(

    【讨论】:

      【解决方案2】:

      @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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-01
        • 2015-05-12
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        • 2014-01-09
        • 1970-01-01
        相关资源
        最近更新 更多