使用Tornado进行Google身份验证

时间:2015-07-03 17:41:40

标签: oauth tornado

我试图让Google认证与Tornado合作来测试这个概念。我有以下代码:

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.gen
import tornado.auth
import os.path
import time

from tornado.options import define, options

define("port",default=8000, help="run on port", type=int)

class AuthHandler(tornado.web.RequestHandler, tornado.auth.GoogleMixin):

   @tornado.gen.coroutine
   def get(self):
      if self.get_argument('code', False):
         print("now running auth_user()")
         user = yield self.get_authenticated_user(
             redirect_uri='http://localhost:8000/auth',
             code=self.get_argument('code'))
         self.set_secure_cookie('token',"XXX")
         self.redirect('/')
      else:
         yield self.authorize_redirect(
             redirect_uri='http://localhost:8000/auth',
             client_id=self.settings['google_oauth']['key'],
             scope=['profile', 'email'],
             response_type='code',
             extra_params={'approval_prompt': 'force'})

 #  def post(self):
 #     self.render('index.html')


class IndexHandler(tornado.web.RequestHandler):
   def get(self):
      token=self.get_secure_cookie('token')
      if not token:
         print("getting google token")
         self.redirect('/auth')
      else:
         print("TOKEN!")

 #  def post(self):
 #     self.render('index.html')


if __name__ == '__main__':
   tornado.options.parse_command_line()
   H=[(r'/',IndexHandler),(r'/auth',AuthHandler)]
   T=os.path.join(os.path.dirname(__file__),"templates")
   settings=dict(
      google_oauth = dict(key="XXX.apps.googleusercontent.com", secret ="YYYYY"),
      cookie_secret = 'DPTDQARHTDayv8WV61iMSsvAD18Rc00bizO519+2i4w='
   )

   app = tornado.web.Application(handlers=H,template_path=T,debug=True, **settings)

   http_server = tornado.httpserver.HTTPServer(app)
   http_server.listen(options.port)
   tornado.ioloop.IOLoop.instance().start()

我一直在

"TypeError: authorize_redirect() got an unexpected keyword argument 'client_id'"

我按照文档获取客户端ID和密码并将这些值放在设置中。此外,我已将Google控制台中的重定向URI设置为'localhost:8000/auth'

1 个答案:

答案 0 :(得分:0)

应该是

let priority = gSteering.indexOf() {
    $0.Ext == fileExtension.uppercaseString
} ?? Int.max