tornado.web.authenticated后退按钮问题

时间:2014-02-10 15:15:29

标签: python authentication tornado

我刚刚使用tornado.web.authenticated添加了一个基于在线教程的简单登录。不幸的是,在成功注销后,当我按下浏览器上的后退按钮时,我仍然可以看到已登录的页面。有没有办法触发浏览历史记录中页面的登录屏幕?

编辑:为了澄清,我已经在使用@ tornado.web.authenticated注释,它在正常使用情况下运行良好,但我遇到的问题是,当使用浏览器的Back按钮返回时,我是仍然可以看到页面就好像我已经登录。我希望有办法解决这个潜在的安全问题。

2 个答案:

答案 0 :(得分:5)

在注销后点击后退按钮时,浏览器会从缓存中加载上一页。要防止受保护的网页被缓存,您必须按照this question

中的说明设置以下标头
self.set_header('Cache-Control', 'no-cache, no-store, must-revalidate')
self.set_header('Pragma', 'no-cache')
self.set_header('Expires', '0')

你可以将它放在装饰器中,例如:

def protected(method):
    @tornado.web.authenticated
    @functools.wraps(method)
    def wrapper(self, *args, **kwargs):
        self.set_header('Cache-Control', 'no-cache, no-store, must-revalidate')
        self.set_header('Pragma', 'no-cache')
        self.set_header('Expires', '0')
        return method(self, *args, **kwargs)
    return wrapper

然后使用@protected而不是@ tornado.web.authenticated装饰受保护的页面。

答案 1 :(得分:2)

在您的方法上使用authenticated装饰器,这将确保并将用户重定向到登录页面。

login_url应该配置部分设置 -

settings = dict({
    "login_url": "/#login",
    .....
 })

和decorator应该像 -

一样添加
class Home(BaseHandler):
    @tornado.web.authenticated
    ...

编辑 - 用户应该注销,您可以按F5进行检查,它会将您重定向到登录页面。如果它向您显示内容只是一个缓存问题,您可能必须明确清除缓存。