2012-06-21 58 views
2

我正在使用Tornado进行第三方认证,如twitter。龙卷风认证

我的登录处理程序看起来像这样

class AuthLoginHandler(BaseHandler, tornado.auth.TwitterMixin, tornado.web.RequestHandler): 
    @tornado.web.asynchronous 
    def get(self): 
     if self.get_argument('oauth_token', None): 
      self.get_authenticated_user(self.async_callback(self._on_auth)) 
      return 
     self.authorize_redirect("/auth/login") 
     return 

    def _on_auth(self, user): 
     if not user: 
      raise tornado.web.HTTPError(500, "Twitter auth failed") 
     self.set_secure_cookie("user", tornado.escape.json_encode(user)) 
     return 

我的问题是,我是否需要设置安全cookie后_on_auth重定向声明?不返回带你回到调用函数。该身份验证处理程序正在由登录decorater调用。另外在/ auth/login中next的意义是什么?next =在大多数例子中。

回答

4

是的,你需要重定向自己。 _on_auth被异步调用,因此return不会带您进入调用函数:已经完成并且已经离开了!

关于/auth/login?next=xxx,下一个参数被设置为请求首先被重定向到登录页面的起始页面。它被使用一次_on_auth成功重定向到它。

截至_on_auth末,与重定向:

self.redirect(self.get_argument('next', '/')) 
+0

如果'下一= HTTP会发生什么:// target.com/annoythem'?这不是一个安全的轻微问题吗?也许'下一个'应该检查是相对的? –