Закройте сессию и перенаправьте на вход в Ruby on Rails
Я работаю с session[:hash_name]
в ruby on rails, чтобы сохранить информацию о сеансе, такую как имя пользователя и прочее.
Я пытаюсь найти способ завершить этот сеанс без необходимости выхода пользователя из системы. Особенно в двух случаях: через некоторое время он должен истечь и когда пользователь закрывает браузер.
До сих пор я нашел другой параметр под названием cookies[:hash_name]
, который может истечь через некоторое время. Но я не уверен, как проверить этот параметр в каждом запросе пользователя, а затем вызвать reset_session. Когда сеанс сброшен, мне нужно перенаправить пользователя на страницу входа в систему.
Любые предложения по решению этих 2-х проблем сильно истощаются.
3 ответа:
Вы можете сохранить сеанс в файле cookie, который по умолчанию является файлом cookie сеанса (то есть он удаляется, когда пользователь закрывает браузер), и добавить время истечения срока действия с помощью
:expire_after
.Это можно настроить в
config/initializers/session_store.rb
. Например:Yourapp::Application.config.session_store :cookie_store, key: 'your_session_id', expire_after: 45.minutes
Ну, я почти уверен, что если вы запустите
session.delete(:hash_name)
, это уничтожит сеанс, однако настоятельно рекомендуется не пытаться построить свою собственную систему аутентификации, особенно когда вам потребуется несколько часов, чтобы построить самую базовую функциональность, в то время как предварительно построенное решение может быть установлено за 20 минут. Кроме того, предварительно построенное решение, вероятно, в два раза безопаснее, чем все, что вы можете приготовить сами, потому что оно было протестировано и протестировано множеством разработчиков.I рекомендую использовать разработки для проверки подлинности. С помощью devise вы получаете такие методы, как
sign_out(current_user)
, которые, очевидно, подписывают пользователя, который сделал запрос. Взгляните на страницу GitHub deviseВсе, что требуется, это
gem install devise
, добавьте его в свой gemfile, а затем запустите
rails g devise:install User # or whatever model name
И они управляются с остальными
Я предполагаю, что вы используете свой собственный метод аутентификации. Итак, для scenario1 (т. е. истекающей сессии через некоторое время), вы можете сделать что-то подобное приведенному ниже:
def create_session if session[:hash_key] destroy_session if session[:last_login] < 10.minutes.ago session[:last_login] = Time.now else ... authenticate session[:last_login] = Time.now end end def destroy_session reset_session end
Для scenario2 (т. е. при закрытии браузера) можно вызвать обработчик событий use jquery и сделать что-то вроде следующего:
$('window').unload(function(){ //call to destroy session method });