Rails 3.2 - 禁用控制器动作的CSRF保护

15

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

protect_from_forgery
为了绕过 CSRF 保护,我已经在我的产品控制器中添加了以下内容:
skip_before_filter :set_status

在进行了这个更改的测试之后,我仍然收到相同的错误消息。根据我的理解,上面的代码行应该禁用产品控制器中“set_status”操作的CSRF保护,但似乎并没有起作用。

是否有人能够解释一下为什么它可能不起作用呢?非常感谢!

1个回答

27

我搞定了!这是我的代码:

skip_before_filter :verify_authenticity_token, only: :set_status

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

Rails 4+版本适用。

skip_before_action :verify_authenticity_token, only: :set_status

2
在较新版本的Rails中,请使用skip_before_action而不是skip_before_filter。(skip_before_filter已被弃用) - Mark van Duijker
1
在最新的版本中,您还可以使用skip_forgery_protection(它只是skip_before_action的内置包装器)。 - Curious Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接