before_filter with devise

时间:2011-05-17 17:00:32

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

我正在使用内置before_filter :authenticate_user!的Devise。如果用户未通过过滤器(尝试在注销时执行操作),我想在我的应用程序助手中调用我自己的自定义方法。我该怎样以及在哪里这样做?

2 个答案:

答案 0 :(得分:7)

而不是调用before_filter :authenticate_user!在调用authenticate_user!的控制器中编写自己的函数。类似的东西:

before_filter :logged_in

...

private
def logged_in
  your_function
  authenticate_user!
end

答案 1 :(得分:7)

我会在使用user_signed_in?的过滤器之前编写自定义。这只会返回一个布尔值,而不会执行authenticate_user!所做的任何重定向类型操作。

所以,你可以写一个像这样的过滤器:

before_filter :custom_user_auth
...
def custom_user_auth
    unless user_signed_in?
        # Do custom stuff, ultimately restricting access to the 
        # ...protected resource if it needs to be
    end
end

请注意,在过滤之前,此操作不会保护您的资源免受未经授权的用户的攻击,除非该unless语句的内部区域重定向或呈现。