【问题标题】:Rails 3.2 - Disable CSRF Protection for controller actionRails 3.2 - 为控制器操作禁用 CSRF 保护
【发布时间】: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 保护,但它似乎不起作用。

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

【问题讨论】:

    标签: ruby-on-rails-3 controller action 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 的内置包装器)
    猜你喜欢
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 2011-06-27
    • 2014-02-13
    • 2013-11-19
    • 1970-01-01
    • 2016-01-21
    • 2010-12-22
    相关资源
    最近更新 更多