Я создал HTTP-перехватчик ответа, который проверяет код состояния 401. Если код 401, он должен просто писать в консоли браузера, но это не работает. Кажется, он даже не поймал его.Не удалось поймать код состояния 401 с помощью Angular HttpInterceptor
App.js:
'use strict';
// Declare app level module which depends on views, and components
var app = angular.module('myApp', []);
app.factory('authHttpResponseInterceptor', ['$q', '$location', function ($q, $location) {
return {
response: function (response) {
if (response.status === 401) {
console.log("Response 401");
}
else
{
console.log("other response but no 401");
}
return response || $q.when(response);
},
responseError: function (rejection) {
if (rejection.status === 401) {
console.log("Response Error 401", rejection);
}
return $q.reject(rejection);
}
}
}])
.config(['$httpProvider', function ($httpProvider) {
//Http Intercpetor to check auth failures for xhr requests
$httpProvider.interceptors.push('authHttpResponseInterceptor');
}]);
Index.html
<html lang="en" ng-app="myApp">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>My AngularJS App</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div ng-controller="testCtrl"></div>
<script src="bower_components/angular/angular.js"></script>
<script src="app.js"></script>
<script src="testController.js" type="text/javascript"></script>
</body>
</html>
testController.js
app.controller('testCtrl', function ($scope, $http, $timeout) {
$http.get('http://ec2-54-229-72-240.eu-west-1.compute.amazonaws.com:8080/webservice/api/stuffs/onestuff', {
headers: {'Authorization': 'Bearer ' + localStorage.getItem('access_token')}
}).success(function (data) {
alert(data.id);
});
});
Маркер доступа хранится в локальном хранилище от предыдущей целевой страницы/входа , То, что я пытаюсь достичь, - перенаправить пользователя на эту целевую страницу, если его токен больше не действителен, или если у него его нет.
Имея действующий токен, никаких проблем, я успешно извлекаю данные из api. Но когда я вручную изменяю сохраненный токен, чтобы вызвать 401, ничего не написано в консоли браузера.
Я уверен, что это 401 Несанкционированный отклик, потому что я проверил его в браузере Chrome. Вот единственное, что я получаю:
XMLHttpRequest cannot load http://ec2-54-229-72-240.eu-west-1.compute.amazonaws.com:8080/webservice/api/students/chat. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8383' is therefore not allowed access. The response had HTTP status code 401.
А вот запросы (да, потому что когда-то у меня есть только один запрос в списке, и при обновлении страницы, что-то добавить, что есть два из них)
Name Status Type Initiator
stuff 200 xhr angular.js:10765
stuff 401 xhr Other
Вот что я говорил о том, за это время, когда я обновил страницу я имел два запроса сделано, но это странно, потому что я только сделать один запрос в моем коде.
И когда-то, после нескольких обновления я только:
Name Status Type Initiator
stuff 401 xhr Other
Но в обоих случаях, я никогда ничего не было написано в консоли, что и доказывает мне, что ошибка 401 была поймана.
Спасибо, и извините за плохой английский!
Спасибо, что вы спасли мои минуты! – ivahidmontazer