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/#! тема/python-tornado/cfTvHzGCrcQ - person Mutant; 10.02.2014
comment
Да, ты попал в самую точку. Спасибо. +1 - person chenj7; 10.02.2014