2011-09-01 35 views
10

我有一个控制器,使用AJAX的CRUD,但每当我点击我的一个远程链接(例如删除)我看到rails服务器已决定注销我并重定向我。对服务器日志的检查表明它无法验证CSRF真实性。我如何在请求中包含CSRF令牌?根据AJAX请求设计登录用户。 Rails 3.1

运行: - Rails的3.1 - 设计1.4.4 - jQuery的轨道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 

布局/ 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> 

在此先感谢。

回答

8

的Rails 3.1采用了宝石“jQuery的轨道”,这要你有这个在你的application.js文件:

//= require jquery 
//= require jquery_ujs 

我已经忘记了jquery_ujs,并得到同样的问题,因为你。

+0

啊,这也解决了我的问题。谢谢! – neezer

4

你应该有这样的HTML页面中:

<%= csrf_meta_tag %> 

产生如下:

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

每当你POST(DELETE,PUT实际上POST但_method设定依赖性)你应该把你的帖子中的数据包括在{authenticity_token: "the token comes here"}中。

+0

是的,确保你在你的布局。 –

+0

虽然我做了,但这是奇怪的部分。 –

+0

我已经包含来自application.html.erb –