Время ожидания динамического сеанса 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

Надеюсь, что это работает для вас!

Спасибо!

Другие вопросы по тегам