1

私はjpegcamと呼ばれるいくつかのjavascriptを使用しています(ペーパークリップを使用して、これらの指示に従います)、さまざまな機会に、誤ったCSRFトークンを作成しています。これは、この問題が適用される唯一の場所です。不良トークンには、中央に「+」文字があります。

JSのこのセクションが問題です webcam.set_api_url('<%= upload_users_path %>' + '?' + csrf_param + "=" + encodeURI(encodeURI(csrf_token)));

警告メッセージ:

Started POST "/users/upload?authenticity_token=N0x/rDOgyC6AutbXzx8sZXLwDnB9zQ+NwWefXTpiSfE=" for 127.0.0.1 at 2013- 06-04 01:06:34 -0400
...
Parameters: {"authenticity_token"=>"N0x/rDOgyC6AutbXzx8sZXLwDnB9zQ NwWefXTpiSfE="}
 WARNING: Can't verify CSRF token authenticity
...
Completed 401 Unauthorized in 15ms

JS (ページ ビュー) は次のようになります。

<script type="text/javascript">
function onload_complete(msg) {
    // fetch the CSRF meta tag data
    var csrf_param = $('meta[name=csrf-param]').attr('content');
    var csrf_token = $('meta[name=csrf-token]').attr('content');

    // reset the api URL appending the auth token parameter
    webcam.set_api_url('<%= upload_users_path %>' + '?' + csrf_param + "=" + encodeURI(encodeURI(csrf_token)));
}
...
</script>
4

2 に答える 2

1

このコードを /application.js に追加します

$(function() {
  $.ajaxSetup({
    beforeSend: function ( xhr ) {
      xhr.setRequestHeader("Accept", "text/javascript") 
    }
  }
}

それが役に立てば幸い

于 2013-06-04T15:17:16.677 に答える
1

リクエストのヘッダーで csrf-token を X-CSRF-Token として渡してみてください。 request.setRequestHeader("X-CSRF-Token", csrf_token)
前回CSRFで問題が発生したときは、それでうまくいきました

于 2013-06-04T13:55:15.810 に答える