2

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 コールバック応答 (ハンドラーによってキャッチされる必要があります) が表示されます。それに対処するための2つの質問があります。

  1. oauth2client/appengine.pyGAE 1.8.0のシッピングにはcallback_path属性もcallback_handler()メソッドもありません。どうすればよいですか? ?('/oauth2callback', OAuth2Handler)の代わりに直接バインドします。(decorator.callback_path, decorator.callback_handler())
  2. それは何を意味しmyapp.yamlますか?次のような新しいブロックを宣言するのは正しいですか。
    - URL: /oauth2callback
      スクリプト: oauth2client/appengine.py

ご協力いただきありがとうございます!これが私の現在のコードです:


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
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

(この 2 番目のアプローチでは、404 キャッチオールを WSGI ハンドラーに追加することが保証される可能性があります。)

于 2013-05-28T20:33:46.980 に答える