2013-02-14 61 views
1

這工作得很好:延遲加載Oauth2Decorator callback_handler使用webapp2的

secrets = 'client_secrets-gae.json' 
decorator = OAuth2DecoratorFromClientSecrets(os.path.join(os.path.dirname(__file__), secrets), 
              scope='https://www.googleapis.com/auth/drive') 
.... 

webapp2.Route('/oauth2callback', handler=decorator.callback_handler()), 

但我怎麼能延遲加載回調using webapp2。我不得不提及裝飾實例:

webapp2.Route(r'/products', handler='handlers.ProductsHandler', name='products-list', handler_method='list_products') 

更新和解決

此行decorator.callback_handler()創建一個請求處理程序的對象。

decorator_callback_handler = decorator.callback_handler() 

.... 

webapp2.Route('/oauth2callback', handler='my_package.my_mod.decorator_callback_handler'), 

當然,我使用不同的模塊來處理裝飾器和webapp2路線,以從延遲加載中受益。

回答

1

此行decorator.callback_handler()返回OAuth 2.0已舞蹈中處理重定向從服務器返回一個webapp.RequestHandler。

來源:callback_handler文檔字符串中oath2client.appengine

因此,解決辦法是:

use_api.py:

secrets = 'client_secrets-gae.json' 
decorator = OAuth2DecoratorFromClientSecrets(os.path.join(os.path.dirname(__file__), secrets), 
             scope='https://www.googleapis.com/auth/drive') 

decorator_callback_handler = decorator.callback_handler() 

懶加載這個處理器在main.py:

app = webapp2.WSGIApplication([   
     ....       # other routes            
     webapp2.Route('/oauth2callback', handler='package.use_api.decorator_callback_handler'),      
    ], debug=True)