2012-12-07 14 views
5

Nel mio server REST, richiede che access_token sia presente in ogni richiesta. Ad esempio, nel POSTing dei dati, access_token deve essere inviato insieme agli attributi.Aggiungi access_token in backbone.js

Come configurare backbone.js per aggiungere access_token a ogni richiesta GET, PUT, POST e DELETE?

Grazie.

risposta

1

Backbone utilizza jQuery/Zepto per le richieste AJAX, quindi è possibile utilizzare le funzionalità disponibili in tali librerie.

Per aggiungere intestazioni personalizzate a tutte le chiamate XHR effettuate da jQuery, è possibile utilizzare jQuery.ajaxSend event, che viene attivato prima di ogni richiesta Ajax e modificare il jqXHR che riceve come argomento.

Modifica sulla base di commenti di OP:

Probabilmente il modo più semplice per modificare i dati inviati è quello di ignorare la funzione Backbone.sync. Si potrebbe avvolgere l'implementazione nativa, e aggiungere la proprietà richiesta c'è:

var nativeSync = Backbone.sync; 
Backbone.sync = function (method, model, options) { 
    //for POST/PUT requests, add access token to the request 
    if(model && (method === 'create' || method === 'update')) { 

    var data = _.extend(model.toJSON(), { 
     access_token: 'token' 
    }); 

    options.data = JSON.stringify(data); 
    } 
    //call the native Backbone.sync implementation 
    nativeSync(method, model, options); 
}; 
+0

Ciao fencliff. Cosa succede se voglio che access_token si trovi nel carico utile dei dati e non nelle intestazioni, come posso ottenerlo? Do I $ .ajaxSend (function (e, jqxhr, settings) {settings.data.access_token = 'mytoken'}) vero? – Mikko

+0

Anche questo può essere fatto - ma sei sicuro di voler aggiungere il token di accesso anche alle richieste GET e DELETE? Non è tipico fornire un corpo di richiesta usando quei verbi, e la maggior parte dei server web ignorano comunque il corpo. – jevakallio

+0

Attualmente sto usando il server REST https://github.com/philsturgeon/codeigniter-resterserver e, mentre ho controllato il codice sorgente, fanno affidamento sul corpo della richiesta. – Mikko

4

Va bene, penso di aver trovato un modo per farlo in jQuery.

$.ajaxSetup (
    { 
     data: { access_token: 'my_access_token' } 
    } 
);