我正在使用一些名为jpegcam的javascript(使用paperclip,跟随these directions),并且在不同的场合,它会创建错误的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>
答案 0 :(得分:1)
尝试将请求标头上的csrf-token作为X-CSRF-Token传递。
request.setRequestHeader("X-CSRF-Token", csrf_token)
上次我遇到CSRF时遇到了问题
答案 1 :(得分:1)
在/application.js
中添加此代码$(function() {
$.ajaxSetup({
beforeSend: function ( xhr ) {
xhr.setRequestHeader("Accept", "text/javascript")
}
}
}
希望有所帮助