Время ожидания динамического сеанса Rails с использованием devise и хранилища сеансов
Я знаю, что могу сделать динамический тайм-аут сеанса (на пользователя) с устройством, как описано здесь
Раньше это работало нормально, но теперь я использую хранилище сессий rails и больше не работает.
Я гуглил довольно долго, но не нашел ответа, кто-нибудь знает, как это сделать?
Спасибо
2 ответа
Я сделал это сейчас с некоторыми before_filters:
class ApplicationController < ActionController::Base
before_filter :update_session, :check_if_session_is_valid
...
def check_if_session_is_valid
session_timeout = current_user.try(:session_timeout) || 1800
if session[:timestamp] <= session_timeout.seconds.ago.to_i
session[:user_id] = nil
end
end
def update_session
session[:timestamp] = Time.now.to_i
end
И в контроллере, который используется опрашивающим устройством, я добавил это (сессия не должна обновляться опрашивающим устройством):
skip_before_filter :update_session, :only => :get_new
Самый простой подход к тайм-ауту сеанса с использованием devise - использовать модуль "timeoutable" Devise. Следующие 2 строки будут служить для функции тайм-аута сессии, только если вы используете devise в вашем приложении Rails.
Шаг 1: В вашей User.rb модели объявите это
devise: timeoutable
Шаг 2:
в app/config/initializers/devise.rb добавьте следующую строку, значение по умолчанию, установленное Devise, составляет 30 минут.
config.timeout_in = 15.minutes
Надеюсь, что это работает для вас!
Спасибо!