2014-02-10 165 views
2

我剛剛添加了一個簡單的登錄使用tornado.web.authenticated基於一些教程在線。不幸的是,在成功註銷後,當我按下瀏覽器上的後退按鈕時,我仍然能夠看到登錄頁面。有沒有辦法觸發瀏覽歷史中的頁面的登錄屏幕?tornado.web.authenticated後退按鈕問題

編輯:爲了澄清,我已經使用@ tornado.web.authenticated批註,它正常運行正常的使用情況,但我遇到了問題,當返回使用瀏覽器的後退按鈕時,我我仍然能夠看到網頁,就好像我登錄了一樣。我希望有一種方法可以解決這個潛在的安全問題。

回答

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 

然後用@裝飾你的受保護的網頁保護而不是@ tornado.web.authenticated。

+0

整潔!在被@Mutant指向後,我發現了自己的緩存控制。不過,你的答案似乎比我要做的要乾淨得多。 – magicpanda

2

在你的方法中使用authenticated裝飾器,這將確保將用戶重定向到登錄頁面。

LOGIN_URL應配置的部分設置 -

class Home(BaseHandler): 
    @tornado.web.authenticated 
    ... 

編輯 - -

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

和裝飾應該像添加用戶應註銷,您可以按F5查看,並它會將您重定向到登錄頁面。如果它顯示你的內容只是一個緩存問題,你可能不得不明確清除緩存。

+1

是的,抱歉,我原來的問題並不清楚,但我已經在使用該註釋。在正常情況下,它工作正常,但我的問題是,當我按下瀏覽器上的後退按鈕時,它不會重定向到login_url。這可能是不安全的。我會嘗試更新我的問題以進行澄清。 – magicpanda

+2

@magicpanda - 在這種情況下,它似乎是瀏覽器緩存歷史記錄問題。你可能想要明確地刪除它。看看這裏的一些討論 - https://groups.google.com/forum/#!topic/python-tornado/cfTvHzGCrcQ – Mutant

+0

是的,你擊中了頭部。謝謝。 +1 – magicpanda