Правильное решение состоит в том, чтобы изменить код на стороне сервера так, чтобы он не возвращал 302 кода состояния, поскольку браузер запускает перенаправление до того, как Angular (или любой SPA в этом отношении) сможет что-то с этим сделать. Обычно вы хотите вернуть 401/403 с этой целью.
Если это невозможно, единственной альтернативой является реализация хакерского решения, чтобы каким-то образом распознать, что ответ действительно является перенаправлением, и обработать его соответствующим образом с помощью HttpInterceptors. Вот эквивалентный пример в AngularJS .
В Angular 2+, вы, вероятно, можете выполнить что-то вроде этого , чтобы проверить, является ли ответ перенаправленной страницей:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req)
.do(event => {
if (event instanceof HttpResponseBase) {
const response = event as HttpResponseBase;
if (response && response.ok && response.url && response.url.toLowerCase().indexOf(this.logoPartialUrl) >= 0) {
// Modify this portion appropriately to match your redirect page
const queryStringIndex = response.url.indexOf('?');
const loginUrl = queryStringIndex && queryStringIndex > 0 ? response.url.substring(0, queryStringIndex) : response.url;
console.log('User logout detected, redirecting to login page: %s', loginUrl);
window.location.href = loginUrl;
}
}
});