Как запретить Devise от автоматического выхода пользователя на определенной странице? - PullRequest
0 голосов
/ 18 мая 2011

У меня есть система авторизации на основе Roise на моем RoR-сайте, и мне нужно автоматически выйти из системы после некоторого времени бездействия. Но также у меня есть несколько страниц на моем сайте, которые были созданы для открытия в течение длительного времени (пользователь просто будет смотреть на страницу, где информация обновляется с помощью ajax), и я хочу НЕ ВЫХОДИТЬ из пользователя, когда эта страница открыта.

У кого-нибудь есть идеи, как это сделать? Или как сказать Devise, что запрос ajax - это тоже действие пользователя?

1 Ответ

1 голос
/ 02 декабря 2011

Сначала убедитесь, что у вас установлено устройство 1.5.2, если нет, обновите его, этот вопрос был 6 месяцев на этот вопрос :-) и я надеюсь, что вы уже решили проблему.

Вы можете изменить возвращаемое значение timeout_in, когда находитесь на странице, на которой хотите запретить автоматический выход.

Например:

class Student < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :timeoutable

  def timeout_in
      if session[:auto_sign_out] then
         #the normal period of signout
         30.minutes
      else
         #very long period, to prevent sign-out
         100.years
      end
  end
end

Затем вы можете легко добавить before_filter в ApplicationController для установки значения session[:auto_sign_out]

как это:

before_filter :manage_page_auto_sign_out


def manage_page_auto_sign_out
# check the params, and see if the id is the id of the specific page
if params[:id] == EXCLUDED_PAGE_ID then
session[:auto_sign_out]= false
else
session[:auto_sign_out]= true
end
end

Кроме того, вы можете добавить другие условия, чтобы убедиться, что вы проверяете нужную страницу, проверяя имя контроллера страницы следующим образом:

def manage_page_auto_sign_out
# check the params, and see if the id is the id of the specific page
if controller_name == 'pages' && params[:id] == EXCLUDED_PAGE_ID then
session[:auto_sign_out]= false
else
session[:auto_sign_out]= true
end
end

вам нужно проверить имя контроллера страницы, надеюсь, это поможет

...