尽管设置了真实性令牌,但是JQuery的InvalidAuthenticityToken

时间:2009-12-22 12:52:07

标签: jquery ruby-on-rails haml

尽管在jquery响应中添加了相应的真实性标记,但我得到了InvalidAuthenticityToken。代码中是否有错误,或者是否存在另一个根问题?我感谢任何评论。谢谢!

使用: Rails 2.3.3,Ruby 1.8.6,Webrick,JQuery 1.3.2

布局/ networks.html.haml

= token_tag
= javascript_tag "window.AUTH_TOKEN = '#{form_authenticity_token}';"

Javascript角/ application.js中

$(document).ready(function() {

    // All non-GET requests will add the authenticity token
    // if not already present in the data packet
    $(document).ajaxSend(function(event, request, settings) {
       if (typeof(window.AUTH_TOKEN) == "undefined") return;
       // <acronym title="Internet Explorer 6">IE6</acronym> fix for http://dev.jquery.com/ticket/3155
       if (settings.type == 'GET' || settings.type == 'get') return;

       settings.data = settings.data || "";
       settings.data += (settings.data ? "&" : "") + "authenticity_token=" + encodeURIComponent(window.AUTH_TOKEN);
     });

  ajaxLinks();
});

渲染的html包含:

<input name="authenticity_token" type="hidden" value="ZaXj3ACQl+8JKtaDAUoxtSsqzEagSPyHbS25ai9qWCw=" />
<script type="text/javascript">
//<![CDATA[
window.AUTH_TOKEN = 'ZaXj3ACQl+8JKtaDAUoxtSsqzEagSPyHbS25ai9qWCw=';
//]]>
</script>

和breakpointing通过,显示window.AUTH_TOKEN已设置。任何解决这个问题的帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

所有这些调试之后,我在Chrome和Firefox上遇到了同样的问题,因此根本原因不是浏览器。一个潜在的问题可能是在表单提交上生成了一个新密钥,并且没有通过ajax调用正确更新。如果有人知道修复此问题或者有一个正在运行的GET / POST / PUT / DESTROY认证的JQuery项目,那就太棒了(即使教程对我不起作用 - 但这可能是由于旧版本的的jquery /导轨)。

答案 1 :(得分:0)

我的主要猜测是您正面临缓存问题...请求来自2个不同客户端的页面并检查两个身份验证密钥中是否存在匹配...