ich intercept calls zum send
Methode empfehlen würde:
(function() {
var send = XMLHttpRequest.prototype.send,
token = $('meta[name=csrf-token]').attr('content');
XMLHttpRequest.prototype.send = function(data) {
this.setRequestHeader('X-CSRF-Token', token);
return send.apply(this, arguments);
};
}());
Dieses gewonnen Fügen Sie die Kopfzeile nicht zur Instanziierungszeit hinzu, sondern direkt bevor die Anfrage gesendet wird. Sie kann abfangen Anrufe zu new XMLHttpRequest()
als auch, aber das wird nicht hilfreich sein, wie Sie mit dem Hinzufügen der Kopfzeile warten müssen, bis open
aufgerufen wurde.
Sie möchten vielleicht auch einen Test für die Ziel-URL der Anfrage einfügen, so dass Sie nur die Kopfzeile hinzufügen, wenn Ihre eigene API aufgerufen wird. Anderenfalls könnte das Token an anderer Stelle verloren gehen oder sogar domänenübergreifende CORS-Aufrufe, die diesen Header nicht zulassen, unterbrochen werden.
haben Sie versucht, [ '$ .ajaxPrefilter'] (http://api.jquery.com/jQuery.ajaxPrefilter/)? Und hier ist ein Beispiel: [Hinzufügen von CSRF-Token zu jQuery AJAX-Anfragen] (http://avinmathew.com/adding-csrf-token-to-jquery-ajax-requests/) – shawnzhu
Warum wollen * Sie * drittens reparieren Bibliotheken, die nicht wissen, wie Sie Ihre API richtig kontaktieren können? – Bergi
@shawnzhu: Nein, OP sagt, es ist eine * rohe * 'XMLHttpRequest'! – Bergi