当api_key存在时,skip_before_filter

时间:2012-05-15 19:58:56

标签: ruby-on-rails ruby-on-rails-3 api csrf

我正在尝试为我的rails应用程序构建一个api。

我想在过滤之前跳过csrf,当非get请求中存在有效的api_key时。

我已经尝试过(一旦我可以使条件过滤器工作,我将验证api_key)

(skip_before_filter :verify_authenticity_token) if params[:api_key].present?

但这不起作用......

有什么想法吗?

4 个答案:

答案 0 :(得分:7)

我认为这不起作用,因为如果在创建控制器类期间评估表达式,那么此时params[:api_key].present?为假...你可以尝试

skip_before_filter :verify_authenticity_token, :if =>lambda{ params[:api_key].present?}

答案 1 :(得分:0)

Rails 3.2.13 -

上述解决方案都没有奏效(也许我做错了什么?)但是这样做了:

skip_before_filter :verify_authenticity_token, :if => :check_auth
def check_auth
  request.headers["authentication_token"] == ENV['AUTH_KEY']
end

答案 2 :(得分:-1)

没有办法让skip_before_filter有条件。如果'你不能使用'在skip_before_filter上。

答案 3 :(得分:-2)

试试这个

skip_before_filter :verify_authenticity_token, :except => [], if params[:api_key].present?