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

问题描述:

我正在通过ajax调用通过twitter引导模式窗口更新我的应用程序中的数据。阿贾克斯代码如下:401在Rails 3应用程序中调用.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 ...如何解决这个问题?

在此先感谢....

根据你的服务器日志,你是不是通过CSRF令牌,所以轨道会自动考虑请求是恶意和其标记为未验证。未经验证的请求的默认处理是重置会话。您可以注释掉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') 
} 
+0

我试了两个。当我在我的ajax调用中添加“header:”时仍然显示401错误。但是,当我添加“skip_before_filter:verify_authenticity_token”它实际上是在做这项工作,但仍然在萤火虫显示“406不可接受”的错误。无论如何,这可能是我的ajax回调代码中的问题。我正在研究它。谢谢你的帮助。 – Siddharth 2013-02-21 05:05:42

添加skip_before_filter :authenticate_user!到控制器。