如何正确定义GAE的oauth2callback?

时间:2013-05-28 18:55:17

标签: python google-app-engine oauth-2.0 google-api-python-client

Using GAE / Decorators指南告诉我“您需要向应用程序添加特定的URL处理程序,以处理从授权服务器到应用程序的重定向”

  def main():
    application = webapp.WSGIApplication(
       [
         ('/', MainHandler),
         ('/about', AboutHandler),
         (decorator.callback_path, decorator.callback_handler()),
       ],
       debug=True)
    run_wsgi_app(application)

目前我无法正确设置。结果,我得到并看到HTTP 302回调响应(虽然它应该由处理程序捕获)而不是我期望的响应。我有两个问题要解决这个问题:

  1. GAE 1.8.0中的oauth2client/appengine.py运费没有callback_path属性,也没有callback_handler()方法,我们该怎么做?直接绑定('/oauth2callback', OAuth2Handler)而不是(decorator.callback_path, decorator.callback_handler())
  2. 这对myapp.yaml意味着什么?声明一个新的块是正确的:
    - url: /oauth2callback
      script: oauth2client/appengine.py
  3. 感谢您的帮助!这是我目前的代码:


    myapp.py

    class UpdatePage(webapp2.RequestHandler):
    
        def get(self):
            playlist_id = self.youtube_create_playlist()
            ...
    
        @decorator.oauth_required
        def youtube_create_playlist(self):
            http = decorator.http()
            request = youtube.playlists().insert(...)
            response = request.execute(http=http)
            return response["id"]
    
        ...
    
        update = webapp2.WSGIApplication([
                                          ('/update', UpdatePage),
                                          ('/oauth2callback', OAuth2Handler)
                                          ],
                                         debug=True)
    

    的app.yaml

    application: myapp
    version: 1
    runtime: python27
    api_version: 1
    threadsafe: false
    
    handlers:
    - url: /
      static_files: index.html
      upload: index.html
    
    - url: /oauth2callback
      script: oauth2client/appengine.py
    
    - url: /update
      script: myapp.update
    

1 个答案:

答案 0 :(得分:2)

此库未在App Engine中发布。

您应使用的版本是google-api-python-client-1.1上托管的google-api-python-client

我认为您所指的版本是appcfg.py project download page的(稍微过时)版本。这仅用于为google-api-python-client执行简单的OAuth 2.0,并且是执行此简单任务的稳定版本。虽然它位于SDK中,但它在运行时中 NOT ,并且由于这些原因而未被认可为routes = [ ('/update', UpdatePage), (decorator.callback_path, decorator.callback_handler()), ] update = webapp2.WSGIApplication(routes, debug=True) 的当前版本。

我还要注意,您明确链接的文章指向included in the App Engine SDK

UPDATE:如前所述,您的WSGI处理程序应该包含来自装饰器的回调

app.yaml

并且您的decorator.callback_path应该允许您的主要处理程序明确匹配- url: /oauth2callback script: myapp.update 中的路由

- url: /.*
  script: myapp.update

或者应该将所有剩余的请求路由到您的WSGI处理程序

{{1}}

(第二种方法可能需要向WSGI处理程序添加404 catch-all。)