#javascript #angularjs #http
#javascript #angularjs #http
Вопрос:
Я работаю над приложением Angularjs, которое часто взаимодействует с сервером. Мне было поручено внедрить безопасность, когда раньше ее не было.
Это означает, что я изменил все вызовы API на стороне сервера, чтобы возвращать 403-несанкционированный код состояния http, когда пользователь пытается выполнить действие, которое ему не разрешено выполнять.
Теперь я МОГ бы пойти и отслеживать каждый отдельный вызов API, который приложение отправляет на сервер, и вызывать функцию, которая одинаково обрабатывает одну и ту же ошибку в каждом из них. Но я бы предпочел найти какой-нибудь способ сказать «Каждый раз, когда эта страница получает ответ 403-unauthorized, выполняйте эту функцию». Возможно ли то, о чем я спрашиваю?
Комментарии:
1. да, вы можете использовать перехватчик $ http для перехвата каждого http-вызова и обработки ваших 403-х там
2. @theTaoOfJS Вы должны дать на это ответ.
Ответ №1:
Вы можете использовать $http
перехватчики. Добавив перехватчик, вы сможете перехватить ответ, чтобы проверить код состояния и сделать все, что захотите, до того, как отправитель исходного запроса получит уведомление.
Например:
app.config(function ($httpProvider) {
// it can be added by a explicit factory declaration
// angular.module(...).factory('myHttpInterceptor', function ...
$httpProvider.interceptors.push(function($q, $state) {
return {
'request': function(config) {
return config;
},
'response': function(response) {
if(response.statusCode === 403){
$state.go('my.unauthorized.state');
// or maybe
// $rootScope.$broadcast('unauthorized');
}
return response;
}
};
});
});