3

我正在通过 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 文件以将其与我的控制器“update_link”方法相匹配。我的方法中的代码如下: -

  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......如何解决这个问题?

提前致谢....

4

2 回答 2

3

根据您的服务器日志,您没有传递 CSRF 令牌,因此 rails 会自动将请求视为恶意请求并将其标记为未经验证。未经验证的请求的默认处理是重置会话。您可以注释掉protect_from_forgery或添加skip_before_filter :verify_authenticity_token到您的控制器中以查看是否是这种情况吗?

如果您想在您的 ajax 请求中包含真实性令牌(强烈推荐),您可以将其添加到您的 ajax 请求的标头中:

headers: {
      'X-Transaction': 'POST Example',
      'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}
于 2013-02-20T15:22:23.917 回答
1

添加skip_before_filter :authenticate_user!到您的控制器。

于 2016-05-20T03:21:58.390 回答