【问题标题】:InvalidAuthenticityToken for JQuery despite setting authenticity token尽管设置了真实性令牌,但 JQuery 的 InvalidAuthenticityToken
【发布时间】:2009-12-22 12:52:07
【问题描述】:

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

使用: 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}';"

javascripts/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>

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

【问题讨论】:

  • rails 日志说的请求参数是什么?
  • 感谢您的回复!参数为:{"action"=>"destroy", 'id"=>"67", "controller"=>"networks"}

标签: jquery ruby-on-rails haml


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我现在只能使用一台计算机,所以我只需要使用另一个浏览器。我在 Chrome 中尝试过,它可以工作!奇怪,因为我在 FireFox 中清除了缓存/cookie。这是基于浏览器或浏览器缓存的不同行为吗?另外,你能清除webrick的缓存吗?谢谢!
    • 你能再用 Chrome 试试同样的表单吗?如果错误再次出现,则需要修改服务器缓存,如果没有,则可能需要检查浏览器缓存的原因。还要检查控制台上的日志,是渲染表单还是加载表单?
    • 我不确定你的意思是相同的形式,但 Chrome 仍然没有显示错误并执行 js。控制台上的日志显示它正在处理 NetworksController#destroy,然后为 Chrome 渲染networks/destroy。对于 FF,日志说它正在处理 NetworksController#destroy,然后遇到 InvalidAuthenticityToken 错误,之后没有渲染。
    猜你喜欢
    • 2014-01-06
    • 2017-11-10
    • 1970-01-01
    • 2021-12-04
    • 2023-03-14
    • 2017-11-06
    • 2020-04-14
    • 1970-01-01
    • 2012-07-29
    相关资源
    最近更新 更多