Ruby on rails 设计根据AJAX请求注销用户。轨道3.1

Ruby on rails 设计根据AJAX请求注销用户。轨道3.1,ruby-on-rails,devise,ruby-on-rails-3.1,csrf,Ruby On Rails,Devise,Ruby On Rails 3.1,Csrf,我有一个使用AJAX for CRUD的控制器,但是每当我点击一个远程链接(例如删除)时,我就会看到rails服务器决定将我注销并重定向我。对服务器日志的检查表明它无法验证CSRF的真实性。如何在请求中包含CSRF令牌 运行: -轨道3.1 -设计1.4.4 -jquery rails 1.0.13 相关控制员行动: def destroy @article = Article.find(params[:id]) if @article.destroy f

我有一个使用AJAX for CRUD的控制器,但是每当我点击一个远程链接(例如删除)时,我就会看到rails服务器决定将我注销并重定向我。对服务器日志的检查表明它无法验证CSRF的真实性。如何在请求中包含CSRF令牌

运行: -轨道3.1 -设计1.4.4 -jquery rails 1.0.13

相关控制员行动:

 def destroy
     @article = Article.find(params[:id])
      if @article.destroy
        flash[:notice] = "Article deleted."
        respond_to do |format|
        format.html{redirect_to articles_path}
        format.js{}
      end
      else
        flash[:error] = "Try Again."
        redirect_to :back
      end
Layouts/application.html.erb

      <head>
    <title><%= content_for?(:title) ? yield(:title) : "Untitled" %></title>
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap-1.1.1.min.css>
    <%= stylesheet_link_tag "application" %>
    <%= javascript_include_tag :defaults %>
   <script type="text/javascript">jQuery.ajaxSetup({ beforeSend: function (xhr) { xhr.setRequestHeader("Accept", "text/javascript"); } });</script>
    <%= csrf_meta_tag %>
    <%= yield(:head) %>
  </head>


您应该在html页面中包含以下内容:

<%= csrf_meta_tag %>

这将生成以下内容:

<meta name="csrf-param" content="authenticity_token"/>
<meta name="csrf-token" content="the token comes here"/>


无论何时发布(DELETE,PUT实际上是POST,但是使用依赖于_方法设置),您都应该将
{authenticity\u token:“token来了”}
包含在您发布的数据中。

Rails 3.1使用gem'jquery Rails',它希望您在application.js文件中包含以下内容:

//= require jquery
//= require jquery_ujs

我忘记了jquery_ujs,遇到了和你一样的问题。

是的,确保你的布局中有这个问题。但是我有,这是很奇怪的一部分。我已经包含了application.html.erb中的头。你是否在ajax调用中一起发送令牌?我相信这取决于rails.js。