Закройте сессию и перенаправьте на вход в Ruby on Rails


Я работаю с session[:hash_name] в ruby on rails, чтобы сохранить информацию о сеансе, такую как имя пользователя и прочее.

Я пытаюсь найти способ завершить этот сеанс без необходимости выхода пользователя из системы. Особенно в двух случаях: через некоторое время он должен истечь и когда пользователь закрывает браузер.

До сих пор я нашел другой параметр под названием cookies[:hash_name], который может истечь через некоторое время. Но я не уверен, как проверить этот параметр в каждом запросе пользователя, а затем вызвать reset_session. Когда сеанс сброшен, мне нужно перенаправить пользователя на страницу входа в систему.

Любые предложения по решению этих 2-х проблем сильно истощаются.

3 7

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
});