Rails 3.2 - 为控制器操作禁用 CSRF 保护
Posted
技术标签:
【中文标题】Rails 3.2 - 为控制器操作禁用 CSRF 保护【英文标题】:Rails 3.2 - Disable CSRF Protection for controller action 【发布时间】:2014-04-29 19:12:51 【问题描述】:我有一个名为 ProductsController 的控制器,并且我创建了一个名为 set_status 的操作,用于从 .NET 客户端应用程序调用 PUT API。我已经正确设置了所有内容,但是在发送请求后,我收到“无法验证 CSRF 令牌真实性”错误。我的应用程序控制器中有以下用于 CSRF 保护的内容:
protect_from_forgery
为了绕过 CSRF 保护,我在 Products 控制器中添加了以下内容:
skip_before_filter :set_status
在使用此更改进行测试后,我仍然收到相同的错误消息。根据我的理解,上述代码行应该为 Products 控制器中的 set_status 操作禁用 CSRF 保护,但它似乎不起作用。
有没有人知道为什么这可能不起作用?非常感谢您!
【问题讨论】:
【参考方案1】:我想通了!这是我的代码:
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
【讨论】:
在最近的 Rails 版本中,使用skip_before_action
而不是 skip_before_filter
。 (skip_before_filter 已被弃用)
在最近的版本中,您还可以使用skip_forgery_protection
(只是skip_before_action
的内置包装器)以上是关于Rails 3.2 - 为控制器操作禁用 CSRF 保护的主要内容,如果未能解决你的问题,请参考以下文章