【问题标题】:401 Unauthorized when calling .ajax method in rails 3 application在 Rails 3 应用程序中调用 .ajax 方法时出现 401 未授权
【发布时间】:2013-02-20 08:41:50
【问题描述】:

我正在通过 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" 没有出现...现在搜索后我能够解决 WARNING 但仍然存在 401...如何解决这个问题?? p>

提前谢谢....

【问题讨论】:

    标签: ruby ruby-on-rails-3 jquery


    【解决方案1】:

    根据您的服务器日志,您没有传递 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')
    }
    

    【讨论】:

    • 我都试过了。当我在我的 ajax 调用中添加“header:”时仍然显示 401 错误。但是,当我添加“skip_before_filter :verify_authenticity_token”时,它实际上正在完成这项工作,但仍在萤火虫中显示“406 Not Acceptable”错误。无论如何,这可能是我的 ajax 回调代码中的问题。我正在调查它。感谢您的帮助。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-04-09
      • 2018-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 2018-07-08
      • 1970-01-01
      相关资源
      最近更新 更多