before_filter with devise

use*_*569 11 ruby-on-rails before-filter devise ruby-on-rails-3

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

chr*_*aly 7

而不是在调用before_filter :authenticate_user!的控制器中调用自己的函数authenticate_user!.就像是:

before_filter :logged_in

...

private
def logged_in
  your_function
  authenticate_user!
end
Run Code Online (Sandbox Code Playgroud)


and*_*ell 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
Run Code Online (Sandbox Code Playgroud)

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