设计后添加过滤器:authenticate_user?

时间:2013-03-08 00:14:35

标签: ruby-on-rails-3 devise namespaces

我想在:authenticate_user!之后添加第二个过滤器。

目前,我的基本命名空间控制器中有一个典型的设置:

module Admin
  class AdminController < ApplicationController
    before_filter :authenticate_user!
  end
end

但是对此的任何变化都不起作用:重定向不会发生,因此用户在不应该访问时仍然可以访问。

# Doesn't work
before_filter :admin_only
def admin_only
  :authenticate_user!
end

# Doesn't work
before_filter do
  :authenticate_user!
end

# Doesn't work
before_filter [:authenticate_user!] 

如果这些变体中的任何一个有效,我可以添加额外的过滤代码。发生了什么事?

2 个答案:

答案 0 :(得分:2)

只需在过滤方法

之前添加额外内容
before_filter :authenticate_user!, :my_extra_before_filter_method
首先执行

authenticate_user!,然后执行自定义过滤器

更新:您也可以拨打before_filter两次

before_filter :authenticate_user!
before_filter :my_extra_before_filter_method

答案 1 :(得分:0)

This answera similar question说明以下内容:

  

Devise在引擎盖下使用Warden   https://github.com/plataformatec/devise/blob/master/lib/devise/controllers/helpers.rb

     

因此,您只需在Warden中添加新策略即可验证您的用户身份。见 https://github.com/hassox/warden/wiki/Strategies

是否要添加第二个过滤器?或者只是覆盖?