我有一个AngularJS应用程序运行在Rails 3.2后端的节点服务器上。我在Cookie/HTTP标题中使用CSRF标记(不是<%= csrf_token%>)。 Angular可以在没有问题的情况下GET和POST到Rails。Rails + Devise的AngularJS(Blueimp Jquery-file-uploader) - 已完成401未授权
我现在试图执行'http://blueimp.github.io/jQuery-File-Upload/angularjs.html'。如果启用了protect_from_forgery,我得到(第一条消息是我放 - 令牌不匹配):
VERIFIED_REQUEST用户:要求:ROyZgMl6CUpbifI45b4URs2iJPRmCtg + mranU8A7xhA = form_authenticity_token F3 + AZaCqzTOXTlwadMZIkOGpyqQFcXZ7ITbm87NUA04 = 警告:无法验证CSRF令牌真实性 已完成401未授权344毫秒
如果我删除protect_from_forgery,我没有得到CSRF警告,但我仍然得到了401!一旦部署代码(到Rails中的公共文件夹,因此是相同的域),相同的功能就可以完美工作。
我已经尝试了几乎所有的解决方案,我可以找到在stackoverflow和其他地方,现在拉我的头发。下面有什么,我已经配置了截至目前:
我设置一个cookie令牌在用户登录后:
高清after_set_user 饼干[ 'XSRF-TOKEN'] = form_authenticity_token如果protect_against_forgery? 看跌期权( “set_csrf_cookie_for_ng#{form_authenticity_token}”) 端
和核对请求头中的令牌:
DEF verified_request? puts(“VERIFIED_REQUEST user:#{current_user} request:#{request.headers ['X-XSRF-TOKEN']} form_authenticity_token#{form_authenticity_token}”) super || form_authenticity_token == request.headers ['X-XSRF-TOKEN'] end
我已经实现了rack_cors gem来迎合OPTIONS请求。
我:
protect_from_forgery 的before_filter:的authenticate_user!
在我的应用程序控制器。
我:
$.ajaxSetup({
headers: {
'X-XSRF-TOKEN': $cookies['XSRF-TOKEN'],
'X-CSRF-Token': $cookies['XSRF-TOKEN']
}
});
在我的角度范围的顶部。
我有这样的:
删除$ http.defaults.headers.common [ “X-要求,以”];
在我的Angular app.js配置中。
做你解决这个问题? –