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はありましたが、Content-typeがありませんでした):

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

ヘッダーを追加すると、この問題が解決しました。

于 2012-07-15T13:24:05.053 に答える
0

CSRFトークンの信頼性を検証できません{"action"=>"create"、 "controller" =>"camps"}
2ミリ秒で500の内部サーバーエラーを完了しました

このエラーは、無効な(または存在しない)CSRFトークンがjsonとともに投稿された場​​合にスローされます。CSRFは、投稿されたデータのヘッダーに添付する必要があります。テストでは、コントローラーに以下を追加することでCSRFトークンを無効にできます(Rails 3の場合)。

secure_from_forgery:except =>:create

サイトが本番環境に移行するときに、それをコントローラーに残さないでください。CSRFトークンは、CSRF攻撃を防ぎます。詳細については、RubyonRailsセキュリティガイドを参照してください。

それでうまくいくかどうか教えてください!

于 2012-07-14T23:41:46.103 に答える