에 도움을 주었다.
필자의 경우 API를 요청했지만 401 메시지가 왔을 때. 로그인 페이지로 이동합니다.
하지만 라우터가 작동하지 않았습니다.
마지막으로 발견 한 것은 기존 요청을 완료해야한다는 것입니다.
길은 오류 메시지를 받고 요청자가 처리하는 것입니다. 당신이 그들을 먼저 가게해야하기 때문에
은
"해결 (ERR)"
를 호출합니다. 최신 요청 요청 전에 탐색 URL을 라우팅합니다.
그렇지 않으면 기존 요청이 유지됩니다.
흐름 ...
1) http 호출을 요청하십시오.
2) 수신자가 인터셉터에서 401 오류를 수신했습니다.
3) 라우팅 경로
4) 던져 오류
5)의 내용으로 에러의 영역에서 오류가 발생했습니다.
6) 해결 (ERR) 또는 다른 메시지 서비스에서
.
getUserInfos(): Promise<any> {
return new Promise((resolve, reject) => {
this.http.get('/api/userinfo/list')
.subscribe((response: any) => {
this.userInfos = response.data;
if (this.searchText && this.searchText !== '') {
this.userInfos = FuseUtils.filterArrayByString(this.userInfos, this.searchText);
}
this.userInfos = this.userInfos.map(userInfo => {
return new UserInfo(userInfo);
});
this.onUserInfosChanged.next(this.userInfos);
resolve(this.userInfos);
}, **err => {
resolve(err);
}**);
}
);
}
.Interceptor
import {
HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest,
HttpResponse
} from '@angular/common/http';
import {Observable} from 'rxjs/Observable';
import {ActivatedRoute, Router} from '@angular/router';
import {Injectable} from '@angular/core';
import 'rxjs/add/observable/throw';
import {FuseConfigService} from './config.service';
import 'rxjs/add/observable/empty';
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private router: Router, private fuseConfig: FuseConfigService) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
console.log('INTERCEPT REQUEST: ', req);
return next.handle(req)
.map((event: HttpEvent<any>) => {
if (event instanceof HttpResponse && ~(event.status/100) > 3) {
console.log('INTERCEPT RESPONSE[' + event.status + ']: ', event);
} else {
console.log('INTERCEPT RESPONSE[' + event.type + ']: ', event);
if(event['body'] && event['body'].code == -444) {
this.router.navigate(['pages/auth/login']);
}
}
return event;
})
.catch(
(err: HttpErrorResponse) => {
console.log('INTERCEPT ERR[' + err.status + ']: ', err.statusText + '/' + err.url);
if(err.status === 401) {
this.fuseConfig.setSettings({
layout: {
navigation: 'none',
toolbar : 'none',
footer : 'none'
}
});
**this.router.navigate(['pages/auth/login']);
return Observable.throw('Unauthorized');**
}
return Observable.throw(err);
});
}
}