Основная идея заключалась в использовании Http Response Interceptor для перенаправления моей веб-страницы, если она дает статус 401. Но я не знаю, правильно ли я делаю это: я думал, что это что-то вроде этого, но мне кажется сложнее, чем кажется. На данный момент я получаю зависимость Circular.Обнаружена круговая зависимость: Http Response Interceptor 401
Нужно ли мне перехватывать перехватчик где-то еще? И как может перехватчик знать, если я получаю запрос 401. это также можно определить, какие 401 должен быть перехватывать и какие из них игнорировали
(function() {
'use strict';
angular
.module('app', ['ngRoute','ngCookies','ngMessages'])
.config(routeConfig);
routeConfig.$inject = ['$routeProvider','$httpProvider'];
function routeConfig($routeProvider,$httpProvider) {
$routeProvider
.when('/', {
templateUrl: 'login.html',
controller : 'LoginController'
})
.when('/register', {
templateUrl: 'register.html',
controller : 'RegisterController'
})
.when('/main', {
//This gives an 401 status when the user has not been logged in
templateUrl: 'home.html',
controller : 'HomeController'
})
.otherwise('/');
// We need to add this for csrf protection
$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
//this gives an Circular dependency error
$httpProvider.interceptors.push('HttpResponseInterceptor');
}
})();
Это моя служба:
(function() {
'use strict';
angular
.module('app')
.factory('HttpResponseInterceptor', HttpResponseInterceptor);
HttpResponseInterceptor.$inject = ['$rootScope','$http','$q','$location'];
function HttpResponseInterceptor($rootScope,$http,$q,$location) {
return {
response: function(response){
if (response.status === 401) {
}
return response || $q.when(response);
},
responseError: function(rejection) {
if (rejection.status === 401) {
$location.path('/login');
}
return $q.reject(rejection);
}
};
}
})();
Update2
Как упоминается в комментарии я был инъекционным к большому количеству вещей. Таким образом, это одна проблема исправлена, но теперь, когда я перехожу на страницу входа в систему, она делает запрос на загрузку страницы (localhost: 8080/user), что приводит к бесконечному циклу перенаправления на страницу входа и сбой в браузере ,
Так есть ли способ я могу сказать перехватчик, который URL, должны быть переориентированы и какие из них не
Вы, вероятно, захотите использовать метод JS indexOf, чтобы проверить, не делает ли URL (возвращает 0 или более) или не возвращает (возвращает -1) определенную строку , например "/Jesus/loves/you".indexOf (" любит ") === 7 ..." /Jesus/loves/you".indexOf ("hello") === -1 – danday74
Это действительно потрясающе из вас, данди, помогая мне. Теперь я понимаю угловые чуть больше. – Greg
Хороший человек надеется, что вам будет весело с ним :) – danday74