【问题标题】:Implementing Google Directory API users watch with Python使用 Python 实现 Google Directory API 用户观看
【发布时间】:2017-05-28 15:04:19
【问题描述】:

我在我的 Python GAE 应用程序中理解和实现 Google Directory API 的用户观看功能和推送通知系统 (https://developers.google.com/admin-sdk/reports/v1/guides/push#creating-notification-channels) 时遇到了一些问题。我想要实现的是,任何使用我的应用程序的用户(管理员)都能够在他自己的域中观察用户的变化。

我已经验证了我想要用于通知的域,并按如下方式实现了监视请求:

directoryauthdecorator = OAuth2Decorator(
approval_prompt='force',
client_id='my_client_id',
client_secret='my_client_secret',
callback_path='/oauth2callback',
scope=['https://www.googleapis.com/auth/admin.directory.user'])

class PushNotifications(webapp.RequestHandler):
      @directoryauthdecorator.oauth_required
      def get(self):
          auth_http = directoryauthdecorator.http()
          service = build("admin", "directory_v1", http=auth_http)

          uu_id=str(uuid.uuid4())
          param={}
          param['customer']='my_customer'
          param['event']='add'
          param['body']={'type':'web_hook','id':uu_id,'address':'https://my-domain.com/pushNotifications'}
          watchUsers = service.users().watch(**param).execute()

application = webapp.WSGIApplication(
                         [
                          ('/pushNotifications',PushNotifications),
                          (directoryauthdecorator.callback_path, directoryauthdecorator.callback_handler())],
                         debug=True)

现在,接收部分是我不明白的。当我在我的域中添加用户并检查应用程序的请求日志时,我看到了一些活动,但没有可用的数据。我应该如何处理这部分?

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: python google-app-engine google-admin-sdk


    【解决方案1】:

    问题

    在实现处理程序时似乎有些混乱。您的处理程序实际上通过向报告 API 端点发送 POST 请求来设置通知通道。正如文档所说:

    要为有关特定资源更改的消息设置通知通道,请向资源的 watch 方法发送 POST 请求。

    source

    您应该只需要发送一次此请求来设置频道,并且“地址”参数应该是您的应用上将接收通知的 URL。

    此外,还不清楚以下代码发生了什么:

    param={}
    param['customer']='my_customer'
    param['event']='add'
    

    您是否只是为了在此处发布代码而破坏代码?或者它实际上是这样写在文件中的吗?实际上,您应该尽可能多地保留您的应用程序正在运行的代码,以便我们对其进行推理。

    解决方案

    似乎从您链接的文档中 - 在“Receiving Notifications”部分中,您应该在“地址”内指定代码以接收将检查通知推送请求上的 POST 请求正文和标头的通知,以及然后对这些数据执行一些操作(例如将其存储在 BigQuery 中或向管理员发送电子邮件等)

    【讨论】:

    • 认为你误解了我最初的帖子。我知道我的代码设置了通知通道。设置似乎成功了。之后我在解释数据时遇到了麻烦。应用程序的日志显示,每次我在测试域上更改内容(添加新用户)时都会发生一些事情,但我似乎没有得到任何相关数据,即使我也在我的应用程序中“侦听”POST 请求,我再也没有得到任何回报。
    • 每次收到 POST 请求都在重新建立通知通道,这似乎并不奇怪?或者您没有检查请求正文中的任何数据?
    【解决方案2】:

    设法弄明白了。在 App Engine 日志中,我注意到每次在我的域上进行更改(被“监视”)时,我都会收到来自 Google API 的 POST 请求,但带有 302 代码。我发现这是因为我在 app.yaml 中为脚本配置了 login: required,该脚本正在处理请求,并且 POST 请求被重定向到登录页面,而不是处理脚本。

    【讨论】:

      猜你喜欢
      • 2017-02-26
      • 2018-12-18
      • 1970-01-01
      • 2019-01-28
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 2013-11-03
      • 2018-03-16
      相关资源
      最近更新 更多