我正在尝试为我的rails应用程序构建一个api。
我想在过滤之前跳过csrf,当非get请求中存在有效的api_key时。
我已经尝试过(一旦我可以使条件过滤器工作,我将验证api_key)
(skip_before_filter :verify_authenticity_token) if params[:api_key].present?
但这不起作用......
有什么想法吗?
答案 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?