如何生成<%= csrf_meta_tags%>在public / index.html文件中

时间:2013-08-14 23:13:34

标签: ruby-on-rails backbone.js devise csrf-protection

我在前端使用Backbone,在后端使用Ruby on Rails。我已经设计了gem,用于我的身份验证。几天前,前端团队完成了他们的工作,现在我需要将这一切绑定在一起。所以我尝试使用带有请求Started POST "/users/sign_in.json"的json trough主干(标准方式)发送数据,即使我将Completed 401 Unauthorized in 180ms放在自定义会话控制器中,也会出现错误protect_from_forgery except: :create。像这样:

class UserSessions::SessionsController < Devise::SessionsController

    protect_from_forgery except: :create
    ......
end

如何省略这个,或者我必须生成<%= csrf_meta_tags %>的地方,以便我可以使用我在网上找到的这种方法:

App.csrfToken = $("meta[name='csrf-token']").attr('content');

Backbone.sync = (function(original) {
  return function(method, model, options) {
    options.beforeSend = function(xhr) {
      xhr.setRequestHeader('X-CSRF-Token', App.csrfToken);
    };
    original(method, model, options);
  };
})(Backbone.sync);

我无法将其移回标准的rails资产管道,因为前端是与我的后端分开编写的,后端依赖于require.js。

1 个答案:

答案 0 :(得分:1)

您可以将csrf_meta_tags放入partial,然后从public / index发出ajax请求,返回该部分的方法。