OK, this should working:
Factory Definition:
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;
}
}
]);
Configuration Definition:
.config(function($httpProvider) {
$httpProvider.interceptors.push('tokenInterceptorService');
});
var AH_App = angular.module('AH_App', [ 'AH_App.services', 'AH_App.controller', ]).config(function ($httpProvider) { $httpProvider.interceptors.push('interceptors'); $httpProvider.defaults.headers.common['Accept'] = 'application/json, text/javascript'; $httpProvider.defaults.headers.common['Content-Type'] = 'application/json; charset=utf-8'; $httpProvider.defaults.headers.common['X-CSRF-TOKEN'] = $('meta[name="csrf-token"]').attr('content'); });$.ajaxSetup({ complete: function (jqXHR) { var new_token = jqXHR.getResponseHeader('X-CSRF-Token'); $('meta[name="csrf-token"]').attr('content', new_token); } });