2010-11-24 2 views
2

После выхода из системы, если я нажму кнопку «Назад» в браузере, он не должен показывать предыдущую страницу, она должна перейти на страницу по умолчанию (только для страницы входа).Предотвратите действие назад после выхода из системы

Поэтому я пробовал по-разному (рубиновое приложение для рельсов), например «history.forward()», «onbeforeunload», истекает кеш в метатеге, «http://www.brookebryan.com/ обнаружение кнопки обратной связи «так много ... я очень смущен.

Может ли кто-нибудь предложить решение?

+0

У вас есть больше шансов найти ответ, если добавить «рубин-на-рельсы» метки на ваш вопрос. – 2010-11-24 05:38:46

+0

добавлен тег ruby-on-rails. – Philipp 2010-11-24 05:39:59

ответ

1

Вы не можете сделать это и по очень веской причине. Если бы можно было отключить кнопку «Назад», тогда вредоносные сайты все это сделают, чтобы вы не ушли. Отказ от базовых функций для ваших пользователей никогда не является хорошей идеей.

Говоря все это, вы можете препятствовать использованию кнопки «Назад». Если вы сделаете свою кнопку выхода из системы POST формой, а затем ответьте на POST напрямую (а не перенаправляете), тогда пользователь увидит предупреждение от браузера, спрашивая их, хотите ли они повторно отправить форму.

Предположим, что для вашей страницы (для которой вы не хотите, чтобы пользователь мог вернуться), для вашего запроса на загрузку AJAX на сервер вам понадобится еще один трюк. Если ответ из этого подзапроса указывает, что пользователь больше не входит в систему, ваш javascript может отскакивать от пользователя на другой странице.

Все это кажется пустой тратой времени, хотя, если честно.

1

Лучший способ сделать это - не управлять браузером, а управлять поведением вашего приложения.

В контроллере, поставить это:

before_filter :validate_user 

и в методе validate_user, определить, если у вас есть вошедшего пользователя (вы не предоставили достаточно подробно, чтобы увидеть код для этого). Если нет зарегистрированного пользователя, переадресовывайте его на страницу входа.

Это очень распространенная идиома; Я все время вижу. Вы можете изучить источник нескольких Rails-приложений. Вот application_controller для Redmine, трекер проблем. Он содержит файл before_filter user_setup, который приводит к методу find_current_user, который найдет объект User из сеанса или попытается выполнить аутентификацию пользователя несколькими способами.

3

Вам необходимо отключить кеширование браузера, чтобы он не возвращал кешированную страницу после выхода из системы. Вы можете это сделать, установив заголовок ответа, чтобы избежать кеширования в контроллере приложения. Как?

in 'application_controller.rb' ..... 

before_filter :set_no_cache 

def set_no_cache 
    response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate" 
    response.headers["Pragma"] = "no-cache" 
    response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT" 
end 

Как уже упоминалось в этом ответе: https://stackoverflow.com/a/748646

Смежные вопросы