我正在执行一些AJAX请求来添加或删除一些对象。像这样的东西:
的javascript
jQuery.getJSON("/apps/remove_screenshot/' + screenshot_id, function(result) {
if (result.status == 'ok') {
screenshot_container.remove()
}
});
控制器
class AppsController < ApplicationController
load_and_authorize_resource
check_authorization
# ...
def remove_screenshot
# ...
end
end
配置/初始化/ devise.rb
config.http_authenticatable = true
# config.http_authenticatable_on_xhr = true
config.navigational_formats = [:html, :json]
问题是,请求成功执行。但是当我重新加载执行请求的页面时,我得到了访问权限错误。
但是,我需要在执行remove_screenshot
操作时检查身份验证。
我该如何解决这个问题?
谢谢!
答案 0 :(得分:2)
修复了这一堆代码(并使用类似代码重写所有非jQuery AJAX请求):
$(function(){
$.ajaxSetup({
beforeSend: function( xhr ) {
var token = $('meta[name="csrf-token"]').attr('content');
if (token) xhr.setRequestHeader('X-CSRF-Token', token);
}
});
});
我的一些jQuery插件发送了AJAX请求而没有发送CSRF令牌。
答案 1 :(得分:0)
你很可能搞砸了一些小事。你只需要知道你做了什么,这里有几个地方可以看;
确保您的application.html.erb
具有以下内容;
<%= csrf_meta_tag %>
然后;
<%= javascript_include_tag "application" %>
并确保application.js
(在您的/app/assets/javascripts
文件夹中);
//= require jquery
//= require jquery_ujs