2

Using GAE/Decorators руководство говорит мне, что «вам нужно добавить определенный обработчик URL для вашего приложения, чтобы обрабатывать перенаправление с сервера авторизации обратно в приложение»:Как правильно определить oauth2callback GAE?

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

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

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

ответ

2

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

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

Я считаю, что версия, о которой идет речь, является (несколько старой) версией google-api-python-clientincluded in the App Engine SDK. Это включено только для выполнения простого OAuth 2.0 для appcfg.py и является стабильной версией для выполнения этой простой задачи. Несмотря на то, что это в SDK, это НЕ во время выполнения и не поддерживается в качестве текущей версии google-api-python-client по этим причинам.

Я также хотел бы отметить, что указанная статья явно указывает на installation instructions.

UPDATE: Как отмечено там, обработчик 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.)

+0

Спасибо за указание мне в правом API для использования. Однако после установки 1.1, обновляя мой проект и гарантируя, что мой импорт теперь разрешен к локальной версии 1.1, теперь я могу использовать '(decorator.callback_path, decorator.callback_handler())', но у меня все еще такая же проблема: обратный вызов isn ' t перехватывается, и я просто заканчиваю необработанными данными перенаправления 302 вместо ожидаемого результата. –

+0

Вам нужно будет указать правильный URL-адрес, определенный в вашем проекте, в [Консоль API Google] (http://code.google.com/apis/console), и вам нужно взять маршрут '/ oauth2callback' из своего приложение. Что касается '302', это ожидается и является точкой обратного вызова. – bossylobster

+0

здесь [скриншот моего API conf] (https://dl.dropboxusercontent.com/u/368761/bugreport/google-api-cliend-id-configuration.png). Но я не понимаю, что вы подразумеваете под * «Ожидается 302 и точка обратного вызова» *. Я понимаю, что 'appengine.py' должен перехватить его и вернуть исходному абоненту ответ на мой запрос: в приведенном выше коде я вызываю' youtube_create_playlist() ', но вместо получения новой строки ID плейлиста я получаю строка 302: [снимок экрана] (https://dl.dropboxusercontent.com/u/368761/bugreport/playlist-id-returns-302-string.png). Что не так? Благодаря! –

Смежные вопросы