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 中使用重定向语句?不返回带您回到调用函数。登录装饰器正在调用此身份验证处理程序。在大多数示例中,/auth/login?next= 中的下一个含义是什么。

4

1 回答 1

4

是的,您需要重定向自己。_on_auth被异步调用,所以return不会带你到调用函数:这已经完成了,已经消失了!

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

在结束时_on_auth,重定向:

self.redirect(self.get_argument('next', '/'))
于 2012-06-25T16:22:18.240 回答