1

フロントエンドには Backbone を、バックエンドには Ruby on Rails を使用しています。認証用にgemを考案しました。数日前にフロントエンド チームが作業を終えました。そのため、リクエストでjsonトラフバックボーン(標準的な方法)でデータを送信しようとしましたが、カスタムセッションコントローラーを入れてもStarted POST "/users/sign_in.json"エラーが発生します。このような:Completed 401 Unauthorized in 180msprotect_from_forgery except: :create

class UserSessions::SessionsController < Devise::SessionsController

    protect_from_forgery except: :create
    ......
end

これを省略する方法、または<%= csrf_meta_tags %>Web で見つけたこのアプローチを使用できるように生成する必要がある場所:

App.csrfToken = $("meta[name='csrf-token']").attr('content');

Backbone.sync = (function(original) {
  return function(method, model, options) {
    options.beforeSend = function(xhr) {
      xhr.setRequestHeader('X-CSRF-Token', App.csrfToken);
    };
    original(method, model, options);
  };
})(Backbone.sync);

フロントエンドは、require.js に依存するバックエンドとは別に作成されているため、これを標準の Rails アセット パイプラインに戻すことはできません。

4

1 に答える 1

2

csrf_meta_tags をパーシャルに入れ、そのパーシャルを返すメソッドに対して public/index から ajax リクエストを行うことができます。

于 2013-08-15T01:06:45.487 に答える