2

我有一个奇怪的问题。我最近检测到通过 AJAX 发布的文本字段出错。经过调查,我发现会话被重置为这个 POST AJAX 请求。我认为一定是csrf问题。我检查了令牌,它像在布局文件中一样被正确传递:

  <%= 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 令牌与哈希中已经存在的令牌不同。我无法理解这一切。任何线索可能是这一切的原因?

4

1 回答 1

0

在我的一个工作 Rails 3 应用程序中,令牌名称是authenticity_token,实际令牌本身在 POST 之前没有编码。

于 2011-04-25T13:33:54.813 回答