2013-07-19 44 views
2

我有一个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配置中。

+0

做你解决这个问题? –

回答

1

请在上传文件之前添加以下内容(在jquery.fileupload.js中)。

$.ajaxSetup({ 
    headers: { 
     'X-XSRF-TOKEN': $.cookie("XSRF-TOKEN") 
    } 
}); 
+0

这个问题太老了,我不知道答案是否正确。 – kpg

+0

它正在为我工​​作,如果你不介意可以批准它作为答案 - 我已经开始一个值得+50的赏金,否则也很好。 – user237865

+0

这里是另一个相关的问题,我回答:http://stackoverflow.com/questions/27265998/pass-csrf-token-to-blueimp-fileupload/27266140#27266140 – user237865