2

使用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.pyshipping没有callback_path属性也没有callback_handler()方法,我们该怎么办呢?直接绑定('/oauth2callback', OAuth2Handler)而不是(decorator.callback_path, decorator.callback_handler())?
  2. 这意味着myapp.yaml什么?声明一个新块是否正确,例如:
    - 网址:/oauth2callback
      脚本:oauth2client/appengine.py

谢谢你的帮助!这是我当前的代码:


我的应用程序.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)

应用程序.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
4

1 回答 1

2

App Engine 中未提供此库。

您应该使用的版本google-api-python-client-1.1托管在项目下载页面上

我相信您所指的版本是google-api-python-client App Engine SDK 中包含的(有些旧的)版本。这仅用于执行简单的 OAuth 2.0,appcfg.py并且是执行此简单任务的稳定版本。虽然它在 SDK 中,但它不在google-api-python-client运行时中,并且由于这些原因不被认可为当前版本。

我还想指出,您链接的文章明确指向安装说明

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

routes = [
    ('/update', UpdatePage),
    (decorator.callback_path, decorator.callback_handler()),
]
update = webapp2.WSGIApplication(routes, debug=True)

并且您app.yaml应该允许您的主要处理程序应该明确匹配中的路线decorator.callback_path

- url: /oauth2callback
  script: myapp.update

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

- url: /.*
  script: myapp.update

(第二种方法可能需要向 WSGI 处理程序添加 404 捕获所有内容。)

于 2013-05-28T20:33:46.980 回答