2010-07-31

tornado.web.authenticated是怎么判断的?

tornado/web.py:

 
def authenticated(method):
    """Decorate methods with this to require that the user be logged in."""
    @functools.wraps(method)
    def wrapper(self, *args, **kwargs):
        if not self.current_user:
            if self.request.method == "GET":
                url = self.get_login_url()
                if "?" not in url:
                    url += "?" + urllib.urlencode(dict(next=self.request.uri))
                self.redirect(url)
                return
            raise HTTPError(403)
        return method(self, *args, **kwargs)
    return wrapper

如果current_user为空就认为没有登陆,而current_user由get_current_user()设定。所以在重载get_current_user()时,如果返回不空,说明用户已经登陆;否则,表示用户尚未登陆。从上面的代码可以看出来,next会记录出错时的uri,登陆之后可供redirect,即self.redirect(self.get_argument('next', 'xxxxx')),其中xxxx一般为/。

没有评论: