我正在使用内置before_filter :authenticate_user!
的Devise。如果用户未通过过滤器(尝试在注销时执行操作),我想在我的应用程序助手中调用我自己的自定义方法。我该怎样以及在哪里这样做?
答案 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
语句的内部区域重定向或呈现。