Я разработал приложение AngularJS (SPA) с использованием Angular 1.3.14.
Я настроил маршрутизацию с помощью Angular-ui-router (0.2.15).
SPA в основном разделен на две части;(1) «сайт», который является всем, что является публичным;и (2) «приложение», которое требует действительный SessionID
в заголовке.В противном случае он выдает HTTP 401.
Все работает относительно хорошо и, как и ожидалось.Это до тех пор, пока у меня есть действительный SessionID.Если мой SessionID истек (или не предоставил ни одного), возвращается HTTP 401 (как требуется).
Поскольку я использую Angular-ui-routing с опциями templateUrl
и controller
, всестраницы (просмотры) автоматически загружаются.
Так что я не слишком уверен, где / как я мог бы перехватить HTTP 401, чтобы соответствующим образом перенаправить на страницу Вход .Прямо сейчас они игнорируются и страницы (просмотры) не загружаются.
Я хотел бы перехватить ошибки HTTP 401 (или хотя бы одну из них) и предоставить пользователю правильное сообщение (например, «сеанс истек» или «требуется вход в систему» или что-то после перенаправления наСтраница входа.
Заранее спасибо.
Обновление: 2018.10.04 21: 44
Я нашел следующее:
$rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {
console.log("State change error:");
console.log(" > Event : ", event);
console.log(" > toState : ", toState);
console.log(" > toParams : ", toParams);
console.log(" > fromState : ", fromState);
console.log(" > fromParams : ", fromParams);
console.log(" > error : ", error);
//event.preventDefault();
});
Интересно, что параметр error
содержит следующее:
> error : {data: {…}, status: 401, headers: ƒ, config: {…}, statusText: ""}
, что позволяет мне сделать это:
if (error.data.success === false) {
console.log("Redirecting to 'Sign-in' page...");
$state.go('sign-in');
}
Единственная проблема, которая остается, заключается в том, что яУ меня много представлений о состоянии, и хотя я могу перехватить ошибку и перенаправить, все остальные представления по-прежнему отправляются на сервер и завершаются ошибкой. Это потому, что все они отправляются параллельно? Будут копать!