tornado.web.authenticated проблем с бутона за връщане назад

Току-що добавих просто влизане с помощта на tornado.web.authenticated въз основа на някои уроци онлайн. За съжаление, след като излязох успешно, когато натисна бутона за връщане назад в браузъра си, все още виждам страниците, в които съм влязъл. Има ли начин да задействам екрана за вход за страници в хронологията на сърфиране?

Редактиране: За да поясня, вече използвам анотацията @tornado.web.authenticated и тя работи добре за нормални случаи на употреба, но се натъквам на проблема, че когато се връщам назад с помощта на бутона за връщане на браузъра, все още мога да виждам страниците, сякаш съм влязъл. Надявам се, че има начин за справяне с този потенциален проблем със сигурността.


person chenj7    schedule 10.02.2014    source източник


Отговори (2)


Когато натиснете бутона за връщане назад след излизане, вашият браузър зарежда предишната страница от кеша. За да предотвратите кеширането на защитени страници, трябва да зададете следните заглавки, както е описано в този въпрос

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.

person A. Jesse Jiryu Davis    schedule 10.02.2014
comment
Чисто! Намерих сам контрола на кеша, след като бях посочен от @Mutant. Вашият отговор обаче изглежда много по-чист от това, което щях да направя. - person chenj7; 10.02.2014

Използвайте authenticated декоратор на вашия метод, който ще направи сигурни и пренасочва потребителя към страницата за вход.

login_url трябва да бъде конфигуриран част от настройките -

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

и декоратор трябва да се добави като -

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

Редактиране - Потребителят трябва да е излязъл, можете да проверите, като натиснете F5, и ще ви пренасочи към страницата за вход. Ако ви покаже съдържанието, това е просто проблем с кеша и може да се наложи изрично да изчистите кеша.

person Mutant    schedule 10.02.2014
comment
Да, съжалявам, че не бях ясен в първоначалния си въпрос, но вече използвам тази анотация. При нормални обстоятелства работи добре, но проблемът ми е, че не пренасочва към login_url, когато натисна бутона за връщане назад в браузъра си. Това е потенциално несигурно. Ще се опитам да актуализирам въпроса си за изясняване. - person chenj7; 10.02.2014
comment
@magicpanda - В този случай изглежда като проблем с историята на кеша на браузъра. Може да искате да изтриете това изрично. Вижте някои дискусии тук - groups.google.com/forum/#! topic/python-tornado/cfTvHzGCrcQ - person Mutant; 10.02.2014
comment
Да, ударихте ноктите на главата. Благодаря. +1 - person chenj7; 10.02.2014