Как правильно определить GAE oauth2callback?

Использование GAE / Декораторы гид говорит мне, чтовам нужно добавить определенный обработчик URL в ваше приложение для обработки перенаправления с сервера авторизации обратно в ваше приложение ":

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

В настоящее время я не могу правильно настроить это. В результате я получаю и вижу ответ обратного вызова HTTP 302 (хотя он должен быть перехвачен обработчиком) вместо ответа I 'Я ожидаю. У меня есть два вопроса для решения этого:

oauth2client/appengine.py доставка в GAE 1.8.0 не имеетcallback_path атрибут и нетcallback_handler() метод, что мы должны делать? Напрямую связывать('/oauth2callback', OAuth2Handler) вместо ?(decorator.callback_path, decorator.callback_handler())Что это значит дляmyapp.yaml? Правильно ли объявить новый блок как:
- url: /oauth2callback
  script: 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

Ответы на вопрос(1)

Решение Вопроса

Эта библиотека не поставляется в App Engine.

Версия, которую вы должны использоватьgoogle-api-python-client-1.1 размещены настраница загрузки проекта.

Я верю версии, которую выссылаюсь на это (несколько старая) версияgoogle-api-python-client включен в SDK App Engine, Это включено только для выполнения простого 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

(Этот второй подход, вероятно, потребует добавления универсального обработчика 404 к обработчику WSGI.)

 bossylobster28 мая 2013 г., 22:52
Вы'Вам нужно будет указать правильный URL в вашем проекте вКонсоль API Google и вам нужно взять/oauth2callback маршрут из вашего приложения. Для302, что ожидается и является точкой обратного вызова.
 Ronan Jouchet29 мая 2013 г., 18:35
Я пытался удалить/oauth2callback маршрут из моегоapp.yamlи я тоже попытался добавить{- /oauth2callback\n script: myapp.update}, но в обоих случаях вместо строки 302 я теперь получаюNone, Можете ли вы быть более конкретным для чего?что не так в моей конфигурации и как я могу это исправить? В очередной раз благодарим за помощь.
 bossylobster29 мая 2013 г., 19:56
Смотрите мое обновление выше
 Ronan Jouchet28 мая 2013 г., 22:46
Спасибо за указание на правильный API для использования. Однако после установки 1.1, обновления моего проекта и обеспечения того, что мой импорт теперь разрешен до локальной версии 1.1, теперь я могу использовать(decorator.callback_path, decorator.callback_handler()), но у меня все та же проблема: обратный вызов нет перехватил, и я просто заканчиваю с необработанными данными перенаправления 302 вместо результата, который я 'Я ожидаю.
 Ronan Jouchet29 мая 2013 г., 15:15
здесьскриншот моего API-интерфейса, Но я нене понимаю, что вы подразумеваете под "302 ожидается & точка обратного вызова, Я понимаю, чтоappengine.py должен перехватить его и вернуть исходному абоненту ответ на мой запрос: в приведенном выше коде я звонюyoutube_create_playlist(), но вместо получения новой строки идентификатора плейлиста, я получаю строку 302:Скриншот, Какие'S не так? Спасибо!
 Ronan Jouchet29 мая 2013 г., 20:38
Спасибо за подтверждениеyaml, Я сделал это, что позволило мне сузить вопрос, а именно:get(self) метод моегоUpdatePage(webapp2.RequestHandler) класс не былт украшен. Я думал, что было бы предпочтительнее украсить мелкозернистую функцию и оставитьget неокрашенный (потому что сам по себе это делаетне делать что-либо, требующее oauth, это простозвонки функции, требующие oauth). После перемещения декоратора доget метод (и удаление его из методов oauth нижнего уровня), это работает! Баджиллион спасибо за помощь :)
 bossylobster29 мая 2013 г., 18:03
appengine.py больше не используется. Ваш декоратор перехватывает это. На основе этого скриншота302 определенно предназначен. Это страница авторизации, где вам нужно принять диалог OAuth 2.0.

Ваш ответ на вопрос