2

我以前在其他一些领域也有过这项服务,但现在我似乎没有让它工作,也不太明白为什么。

我将以下 json 发布到我的 Rails 应用程序(使用 RestClient 2.4,用于测试):

{
    "camp":{
        "total": 100,
        "number": "epw1f6e"
    },
    "machine":{
        "serial_number": "1234567",
        "token": "fONxDN"
    }
}

营地控制器:

def create
    if is_it_json?
      logger.debug params.inspect
      machine = Machine.find_by_serial_number(params[:machine][:serial_number])
...

从记录器中,我得到参数是: {"action"=>"create", "controller"=>"camp"}

json信息在哪里??

我的日志错误:

Started POST "/camps" for 127.0.0.1 at 2012-07-15 00:08:21 +0100
Processing by CampsController#create as JSON
WARNING: Can't verify CSRF token authenticity
{"action"=>"create", "controller"=>"camps"}
Completed 500 Internal Server Error in 2ms

NoMethodError (undefined method `[]' for nil:NilClass):
  app/controllers/camps_controller.rb:24:in `create'

我可能做错了什么?

谢谢

4

2 回答 2

6

经过大量阅读和提问,我刚刚找到了解决方案:

参数没有被填满,因为我缺少标题(我有接受,但缺少内容类型):

Accept: application/json
Content-type: application/json

添加标题解决了这个问题。

于 2012-07-15T13:24:05.053 回答
0

无法验证 CSRF 令牌真实性 {"action"=>"create", "controller"=>"camps"}
Completed 500 Internal Server Error in 2ms

当您的 json 发布无效(或不存在)的 CSRF 令牌时,将引发该错误。CSRF 需要附加到任何已发布数据的标头。为了进行测试,您可以通过将以下内容添加到控制器(对于 Rails 3)来禁用 CSRF 令牌:

protect_from_forgery :except => :create

当站点投入生产时,不要将其留在控制器中。CSRF 令牌可防止 CSRF 攻击。有关详细信息,请参阅Ruby on Rails 安全指南

让我知道这是否有用!

于 2012-07-14T23:41:46.103 回答