Rails 3.2 - 禁用CSRF保护以执行控制器操作

Ale*_*der 12 action controller csrf ruby-on-rails-3

我有一个名为ProductsController的控制器,我为.NET客户端应用程序的PUT API调用创建了一个名为set_status的动作.我已经正确设置了所有设置,但在发送请求后,我收到"无法验证CSRF令牌真实性"错误.我的应用程序控制器中有以下内容用于CSRF保护:

protect_from_forgery
Run Code Online (Sandbox Code Playgroud)

为了绕过CSRF保护,我在产品控制器中添加了以下内容:

skip_before_filter :set_status
Run Code Online (Sandbox Code Playgroud)

在使用此更改进行测试后,我仍然收到相同的错误消息.根据我的理解,上面的代码行应该禁用Products控制器中的set_status操作的CSRF保护,但它似乎不起作用.

有没有人知道为什么这可能不起作用?非常感谢你提前!

Ale*_*der 22

我想到了!这是我的代码:

skip_before_filter :verify_authenticity_token, :only => [:set_status]
Run Code Online (Sandbox Code Playgroud)

我忘记了protect_from_forgery语句创建了自己的方法.其中一种方法是verify_authenticity_token,因此它比我想象的要简单得多.我之前被卡住了,因为我没有verify_authenticity_token方法,但实际上我做了因为它是自动生成的.

  • 在最新版本的rails中,请使用`skip_before_action`而不是`skip_before_filter`。(不建议使用skip_before_filter) (2认同)