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