Skip to content

Instantly share code, notes, and snippets.

@MacKentoch
Last active July 19, 2017 03:48
Show Gist options
  • Save MacKentoch/ffb85b8a2babe96d166a to your computer and use it in GitHub Desktop.
Save MacKentoch/ffb85b8a2babe96d166a to your computer and use it in GitHub Desktop.
function authInterceptor($httpProvider) {
$httpProvider.interceptors.push(($timeout, $q, $injector, userStorage) => {
let $http, $state, $mdDialog, $mdToast, $signin;
// this trick must be done so that we don't receive
// `Uncaught Error: [$injector:cdep] Circular dependency found`
$timeout(() => {
$signin = $injector.get('$signin');
$http = $injector.get('$http');
$state = $injector.get('$state');
$mdToast = $injector.get('$mdToast');
userStorage = $injector.get('userStorage');
$mdDialog = $injector.get('$mdDialog');
});
let interceptor = {
request : request,
responseError : responseError
};
return interceptor;
//intercept request : example to add token :
function request(config){
//add autorization to header otherwise server will 401
config.headers = config.headers || {};
if (userStorage.isUserLoggedIn()) {
config.headers.Authorization = 'Bearer ' + userStorage.getUserToken();
}
return config;
}
//intercept errors
function responseError(rejection){
if (rejection.status !== 401 && rejection.status !== 409) return rejection;
let deferred = $q.defer();
/**
* case an attenmpt to login,
* -> but error : prevent instance a new modal login
* -> throw a toaster
*/
if (rejection.config.url === '/api/user/login' &&
rejection.config.method === 'POST') {
deferred.reject('login failed');
}else{
let parent = angular.element(document.body);
let clickOutsideToClose = true;
$signin.show(parent, clickOutsideToClose)
.then(() => {
deferred.resolve( $http(rejection.config) );
})
.catch(() => {
$state.go('home');
deferred.reject(rejection);
});
}
return deferred.promise;
}
});
}
authInterceptor.$inject = ['$httpProvider'];
export default authInterceptor;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment