는 내가 인증 HttpInterceptor
있습니다Angular4 인터셉터 변화 대응
import {HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor,
HttpRequest} from '@angular/common/http';
import {AuthService} from '../service/auth.service';
import {Observable} from 'rxjs/Observable';
import {Injectable} from '@angular/core';
import {Router} from '@angular/router';
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private authService: AuthService,
private router: Router) {
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const authHeader = this.authService.getToken();
const clone = req.clone({headers: req.headers.set('Authorization',authHeader)});
return next.handle(clone).do(() => {
}, err => {
console.log(err);
if (err instanceof HttpErrorResponse && err.status === 401) {
this.authService.clearToken();
this.router.navigate(['/auth/signin']);
return Observable.empty();
}
});
}
}
내가 페이지를 로그인하는 사용자를 리디렉션 해요 (401) 받고 있어요,하지만 오류가 계속 서비스에 갈 때이 인터셉터는 잘 작동하지만, 그 서비스에서 나는 오류 메시지를 보여 주며,이 메시지는 서명 페이지에 표시됩니다. 그래서 응답을 변경하거나이 경우 오류를 반환하지 않으려면 if (err instanceof HttpErrorResponse && err.status === 401) {
블록에서 수행하고 싶습니다.
return Observable.empty();
는
당신이 캐치와 작은 예제를 적어주세요 수 있습니까? – user2870934
@ user2870934, 내 대답을 편집했습니다. 코드는 거의 동일합니다. 당신은 매우 가깝습니다. –