jquery - AngularJS (Blueimp Jquery-file-uploader) 与 Rails + Devise - 已完成 401 未经授权

标签 jquery ruby-on-rails ajax angularjs csrf

我有一个 AngularJS 应用程序在 Rails 3.2 后端的节点服务器中运行。我在 cookie/HTTP header 中使用 CSRF token (不是 <%= csrf_token %>)。 Angular 可以毫无问题地 GET 和 POST 到 Rails。

我现在正在尝试实现'http://blueimp.github.io/jQuery-File-Upload/angularjs.html '。如果我启用了protect_from_forgery,我会得到(第一条消息是我的看跌期权 - token 不匹配):

VERIFIED_REQUEST 用户:请求:ROyZgMl6CUpbifI45b4URs2iJPRmCtg+mranU8A7xhA= form_authenticity_token f3+AZaCqzTOXTlwadMZIkOGpyqQFcXZ7ITbm87NUA04= 警告:无法验证 CSRF token 的真实性 在 344 毫秒内完成 401 未经授权

如果我删除protect_from_forgery,我不会收到CSRF警告,但我仍然收到401!一旦代码被部署(部署到 Rails 中的公共(public)文件夹,因此是相同的域),相同的功能就可以完美运行。

我已经尝试了几乎所有我能在 stackoverflow 和其他地方找到的解决方案,现在我正在抓狂。这是我现在的配置:

我在用户登录后在 cookie 中设置 token :

def after_set_user cookies['XSRF-TOKEN'] = form_authenticity_token 如果 protected_against_forgery? 投入(“set_csrf_cookie_for_ng#{form_authenticity_token}”) 结束

并根据请求 header 检查 token :

def 验证请求? put("VERIFIED_REQUEST 用户:#{current_user} 请求:#{request.headers['X-XSRF-TOKEN']} form_authenticity_token #{form_authenticity_token}") super || form_authenticity_token == request.headers['X-XSRF-TOKEN'] 结束

我已经实现了rack_cors gem 来满足 OPTIONS 请求。

我有:

防止伪造 before_filter :authenticate_user!

在我的应用程序 Controller 中。

我有:

$.ajaxSetup({
  headers: {
    'X-XSRF-TOKEN': $cookies['XSRF-TOKEN'],
    'X-CSRF-Token': $cookies['XSRF-TOKEN']
  }
});

在我的 Angular 范围的顶部。

我有这个:

删除 $http.defaults.headers.common["X-Requested-With"];

在我的 Angular app.js 配置中。

最佳答案

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

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

关于jquery - AngularJS (Blueimp Jquery-file-uploader) 与 Rails + Devise - 已完成 401 未经授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17749310/

相关文章:

ruby-on-rails - Rails 模型生成器工具

ruby-on-rails - 优雅的 ruby​​ 函数,需要帮助清理它,让它看起来像 ruby

javascript - 使用 PHP、Ajax 和 Javascript/jQuery 进行推送?

javascript - 具有动态输入字段的动态表中的复选框

javascript - 操作要在 DOM 加载后添加的类的 CSS

javascript - jQuery:简单的 $() 选择 #id 在 RoR 上下文中不起作用

javascript - 动态选择最后一个子元素

jquery - 用于更改背景颜色的基本 jQuery 插件

mysql - ruby on rails 数据库迁移

php - 发表评论脚本