有没有办法覆盖设计会话控制器创建动作?

时间:2012-07-19 12:14:13

标签: ruby-on-rails ruby ruby-on-rails-3 devise before-filter

我想知道是否有办法覆盖应用程序控制器中的设备会话控制器创建操作。所以我有这个代码

  def check_concurrent_session
    if is_already_logged_in?
      flash[:error] = "We're sorry, you can't login to two places concurrently."
      sign_out_and_redirect(current_user)
    end
  end

我需要在网站上的任何地方运行,然后在设计会话控制器中创建操作..

所以我在应用程序控制器上有一个before_filter,但是我可以排除一个类似

的控制器
before_filter :check_concurrent_session, :except => ["somecontoller"]

显然这是错误的,但你明白了。我知道我可以创建自己的会话控制器并继承设计,但我想知道是否可以从应用程序控制器中执行此操作

2 个答案:

答案 0 :(得分:1)

before_filter :check_concurrent_session

def check_concurrent_session
  return if controller_name == 'some_controller'
  if is_already_logged_in?
    flash[:error] = "We're sorry, you can't login to two places concurrently."
    sign_out_and_redirect(current_user)
  end
end

答案 1 :(得分:1)

application.rb

module XXX
  class Application < Rails::Application
    ...

    config.to_prepare do
      Devise::SessionsController.skip_before_filter :check_concurrent_session
    end
  end
end