Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 401在rails 3应用程序中调用.ajax方法时未经授权_Ruby_Ruby On Rails 3_Jquery - Fatal编程技术网

Ruby 401在rails 3应用程序中调用.ajax方法时未经授权

Ruby 401在rails 3应用程序中调用.ajax方法时未经授权,ruby,ruby-on-rails-3,jquery,Ruby,Ruby On Rails 3,Jquery,我正在通过twitter引导模式窗口传递一个ajax调用来更新应用程序中的数据。下面给出了ajax代码: $(document).ready(function(){ var link=$('#link_hash').val(); $("#update_link").click(function(){ console.log("I'm here"); $.ajax({ url: "profiles/update_link",

我正在通过twitter引导模式窗口传递一个ajax调用来更新应用程序中的数据。下面给出了ajax代码:

  $(document).ready(function(){
    var link=$('#link_hash').val();
  $("#update_link").click(function(){
    console.log("I'm here");
     $.ajax({
            url: "profiles/update_link",
            type: "POST",
            dataType: "html",
            data: {link: link,data: $('#link_hash').val() },
            success: function(data) {
              // some code
            },
            error: function(data1) {
              // some code
             }
            });

        });
      });
我修改了route.rb文件,使其与控制器的“更新链接”方法相匹配。 我的方法中的代码如下所示:-

  def update_link
    @link=Link.find_by_link(params[:link])
    @tlink=Link.find_by_link(params[:data])
    logger.info "=========kkkkkkkkkkkkkk=================================#{@link.inspect}"
    logger.info "=========kkkkkkkkkkkkkk=================================#{@tlink.inspect}"
    logger.info "=========kkkkkkkkkkkkkk=================================#{params.inspect}"

    respond_to do |format|
      if @tlink.nil? 
         @link.update_attributes(:link => params[:data])

        ...some code....
      else
    ...some code...
      end
    end
  end
end
所以在服务器日志中显示-

Started POST "/profiles/update_link" for 127.0.0.1 at 2013-02-20 12:08:20 +0530
Processing by ProfilesController#update_link as HTML
  Parameters: {"link"=>"9bfzjp", "data"=>"9bfzjpaaa"}
WARNING: Can't verify CSRF token authenticity
Completed 401 Unauthorized in 6ms
很明显,“logger.info”没有显示…现在搜索后,我能够解决警告,但仍然存在401…如何解决此问题


提前感谢….

根据您的服务器日志,您没有传递CSRF令牌,因此rails会自动认为请求是恶意的,并将其标记为未验证。未验证请求的默认处理方式是重置会话。您是否可以注释掉
防止\u伪造
或将
在\u过滤器之前跳过\u:验证\u真实性\u令牌
添加到您的控制器,以查看其是否正确

如果您希望在ajax请求中包含Authentity token(强烈建议),可以将其添加到ajax请求的标题中:

headers: {
      'X-Transaction': 'POST Example',
      'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}

添加
在过滤之前跳过:验证用户发送到控制器。

我两次都试过了。当我在ajax调用中添加“header:”时,仍然显示401错误。但是,当我添加“跳过\u之前的\u过滤器:验证\u真实性\u令牌”时,它实际上正在执行任务,但仍然在firebug中显示“406不可接受”错误。无论如何,我的ajax回调代码中可能有问题。我正在调查。谢谢你的帮助。