Предотвратить обратное действие после выхода - PullRequest
5 голосов
/ 24 ноября 2010

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

Так что я пытался разными способамиruby on rails application) как "history.forward ()", "onbeforeunload", срок действия кэша в метатеге, "http://www.brookebryan.com/ обнаружение кнопки назад", так много ... я очень запутался.решение?

Ответы [ 3 ]

4 голосов
/ 26 мая 2014

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

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

1 голос
/ 24 ноября 2010

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

В вашем контроллере введите:

before_filter :validate_user

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

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

1 голос
/ 24 ноября 2010

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

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

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

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

...