我如何在Angular JS中执行此代码
$.ajaxSetup({
complete: function (jqXHR) {
var new_token = jqXHR.getResponseHeader('X-CSRF-Token');
$('meta[name="_token"]').attr('content', new_token);
}
});
当我使用angular $ http发布时,我想设置新令牌
好的,这应该工作:
工厂定义:
myApp.factory('tokenInterceptorService', ['$q',
function CsrfTokenInterceptorService($q) {
var CSRF_TOKEN_HEADER = 'X-CSRF-TOKEN';
var token;
var service = {
response: onSuccess,
responseError: onFailure,
request: onRequest,
};
return service;
// Private functions.
function onFailure(response) {
if (response.status === 403) {
//DO SOMETHING
}
return $q.reject(response);
}
function onRequest(config) {
//SET TOKEN TO SEND
config.headers[CSRF_TOKEN_HEADER] = token;
return config;
}
function onSuccess(response) {
//SET HERE NEW TOKEN FROM REQUEST RESPONSE
var newToken = response.headers(CSRF_TOKEN_HEADER);
if (newToken) {
token = newToken;
}
return response;
}
}
]);
配置定义:
.config(function($httpProvider) {
$httpProvider.interceptors.push('tokenInterceptorService');
});
您可以使用interceptors来推送http请求的令牌
//Assuming you've created an module,
app.config([ '$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push('CSRFInterceptor');
}]);
app.service('CSRFInterceptor', [function() {
this.request = function(config) {
config.headers['X-CSRF-Token']= getCSRFToken();
return config;
};
}]);