LoginSignup
36
37

More than 5 years have passed since last update.

Backbone.jsでRailsのCSFR防止tokenをうまく扱う

Last updated at Posted at 2012-12-26

Rails3+Backboneでハマるポイント

Rails 3では,CSRFを防止するためにPOSTリクエストに専用のトークンを要求する仕組みがあります.
このトークンチェックを必須にした場合,Backbone.jsでのsyncやsaveなどで送るデータでもこのトークンをパラメタとして渡す必要があるため,saveなどで毎回authenticity_token: tokenを書かなければいけません.
もし書き忘れると「なぜかPOSTリクエストがうまく送れない」という事態になります.僕はこれによくハマりました…

対応

そこでsyncやsaveが内部的に使っているBackbone.syncを書き換え,tokenを必ず渡すようにします.
実際に書き換えるのはBackbonel.Model.toJSONです.JSONを作るときにtokenを差し込むようにします.

var token = $('meta[name="csrf-token"]').attr('content');
Backbone.Model.prototype.toJSON = function() {
    return _(_.clone(this.attributes)).extend({
        authenticity_token: token
    });
};

あんまり綺麗なやり方じゃないですが,不要にはまるのを避けられます:D

36
37
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
37