0

一部のオブジェクトを追加または削除するために、いくつかの 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

config/initializers/devise.rb

config.http_authenticatable = true
# config.http_authenticatable_on_xhr = true
config.navigational_formats = [:html, :json]

問題は、リクエストが正常に実行されることです。しかし、リクエストを実行したページをリロードすると、アクセス拒否エラーが発生しました。

それでも、remove_screenshotアクションを実行するときに認証を確認する必要があります。

どうすればこれを回避できますか?

ありがとう!

4

2 に答える 2

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プラグインは、CSRFトークンを送信せずにAJAXリクエストを送信していました。

于 2012-12-13T13:22:20.120 に答える
0

あなたはおそらく小さな何かを台無しにしたでしょう。あなたは自分が何をしたかを知る必要があります。ここにいくつかの場所があります。

次のものがあることを確認してくださいapplication.html.erb

<%= csrf_meta_tag %>

その後;

<%= javascript_include_tag "application" %>

application.js/app/assets/javascriptsフォルダ内に)あることを確認してください。

//= require jquery
//= require jquery_ujs
于 2012-12-11T22:01:51.910 に答える