クライアント側でPhoneGap、jQuery Mobile、Backbone.jsを使用してモバイルアプリケーションを構築しようとしています-サーバー側でRails 3 JSONAPIを実行しています。
認証後にサーバーからトークンをフェッチする方法は知っていますが、Backbone.jsがサーバーに対して行うすべてのAJAXリクエストに「token_auth」キー/値を追加する方法がわかりません。
現時点での私の流れは次のとおりです。
私は http://documentcloud.github.com/backbone/#Sync AJAX呼び出しをオーバーライドするために)==を見てきましたが、これはこの単純なものとしてはかなり極端に思えます仕事。
Devise token_authenticationとBackbone.jsを実行した経験のある人はいますか?
すべてのjqueryajaxリクエストに追加しないのはなぜですか。これにより、jQueryを介したすべてのajax呼び出しにauth_tokenが追加されます。これは、jQuery ajax(またはそうするライブラリ)を直接操作するときに役立つ場合があります。ただし、これはセキュリティの問題でもある可能性があります(他のサイトへのajax呼び出しがある場合...)。
// this is untested
$.ajaxSetup({ beforeSend : function(xhr, settings){
// just because the auth_token is a private information
if(!settings.crossDomain) {
// parse data object
var dataobj = JSON.parse(xhr.data);
// add authentication token to the data object
dataobj.auth_token = AUTHENTICATION_TOKEN;
// save the dataobject into the jqXHR object
xhr.data = JSON.stringify(dataobj);
}
}});
別のアプローチは、そのトークンをヘッダーに書き込み、サーバー側で処理することです。
// thats not beautiful
$.ajaxSetup({ headers : { "auth_token" : AUTHENTICATION_TOKEN } });
重要なのは、それをBackbone.sync
メソッドで導入することです。
この実装を見てください: https://github.com/codebrew/backbone-Rails/blob/master/vendor/assets/javascripts/backbone_Rails_sync.js
この方法で自分で追加できます。
Backbone.old_sync = Backbone.sync
Backbone.sync = function(method, model, options) {
var new_options = _.extend({
beforeSend: function(xhr) {
var token = $('meta[name="csrf-token"]').attr('content');
if (token) xhr.setRequestHeader('X-CSRF-Token', token);
}
}, options)
return Backbone.old_sync(method, model, new_options);
};
このフィドルをチェックしてください: http://jsfiddle.net/dira/ZcY3D/14/
Ajaxリクエストがサーバーに送信されるたびに送信するこのような関数を作成します
$(function(){
$(document).ajaxSend(function(e, xhr, options) {
var token = $("meta[name='csrf-token']").attr("content");
xhr.setRequestHeader("X-CSRF-Token", token);
});
})