rails skip_before_filter:verify_authenticity_token无效

时间:2011-10-07 14:19:06

标签: ruby-on-rails ruby

我需要通过ruby脚本从办公室计算机发布到远程服务器。我已经把

skip_before_filter :verify_authenticity_token

在控制器中我每次尝试都会得到“你想要的改变被拒绝”当我看到日志时我得到了

ActionController::InvalidAuthenticityToken

我误解了什么吗? 这是ruby脚本中的代码

   url="display_ad[title]=#{row[1]}"
   date_arr = row[2].split('/')
   start_date = date_arr[2].to_s + "-" + date_arr[0].to_s + "-" + date_arr[1].to_s
   url+="&display_ad[start_date]=#{start_date}"

   date_arr = row[3].split('/')
   end_date = Date.new( date_arr[2].to_i,  date_arr[0].to_i,  date_arr[1].to_i )
   end_date = end_date + 7
   end_date = end_date.strftime("%Y-%m-%d")
   url+="&display_ad[end_date]=#{end_date}"
   url+="&display_ad[slug]=#{row[7]}"
   url+="&display_ad[category]=othr"
   url = url.gsub("\n","")
   url = url.gsub("\r","")
   p url
   easy =  Curl::Easy.http_post("http://example.com/advertising/web/web_service_add", url)

并在控制器动作中

 ad = DisplayAds.new(params[:display_ad])
 ad.save

2 个答案:

答案 0 :(得分:1)

在与Rails 2.3.8项目存在相同问题后,我登陆此页面。我成功地在几个控制器中使用skip_before_filter :verify_authenticity_token,但这是我第一次尝试在应用程序控制器中定义的操作的ApplicationController类顶部使用它。

我将操作移动到另一个控制器,以及skip_before_filter行,并且按预期正确禁用了验证。我认为可能的问题是,当在应用程序控制器中直接使用该类中定义的操作时,这可能无法正常工作。我没有调查过这可能是什么原因,因为在我这方面懒得编码我已经在那里定义了特定的动作,所以无论如何移动它是一个更好的选择。遇到此问题的其他人应尝试将受影响的操作移出ApplicationController类。

有趣的是,在一个Rails 3.2.1项目中,我在skip_before_filter :verify_authenticity_token中使用ApplicationController并在类中定义了一个动作,它运行正常。

答案 1 :(得分:1)

请检查您的代码是否这一行:

protect_from_forgery

它将启动csrf保护。 请记住,在此方法之后放置所有sckip_before_filter。

Gook Luck!