2011-04-24 54 views
2

我有一个奇怪的问题。我最近发现通过AJAX发布的文本字段出错。经过调查,我发现会话重置为POST POST AJAX请求。我认为一定是csrf问题。我检查凭证并正在布局文件正确地传递这样的:Rails会话重置

<%= javascript_tag "var AUTH_TOKEN = #{form_authenticity_token.inspect};" if protect_against_forgery? -%> 

我的AJAX请求是这样的:

<script type="tex/javascript"> 
      $(document).ready(function(){ 
        $("#post_msg").click(function(){ 
          var update = $("#msg").val(); 
          var authenticity_token = AUTH_TOKEN; 
          $.ajax({ 
            type: "POST", 
            url: "/messages.js", 
            data: "msg[text]="+escape(msg) + "&_csrf_token="+encodeURIComponent(authenticity_token), 
            dataType: "json", 
            success: function(msg){ 
             // Code to append the msg to DOM 
            ) 

但在调试器,我注意到, csrf标记与已经在散列中的标记不同。我无法理解这一切。任何线索可能是所有这些的原因?

+0

你使用页面缓存吗?如果是这样,你可能用一个CSRF令牌缓存表单,然后再把它提供给另一个用户。 – 2011-04-24 08:36:04

回答

0

在我工作的Rails 3应用程序中,令牌名称为authenticity_token,实际令牌本身在POSTing之前未经过编码。