나는이 인터셉터를 가지고 :HttpClient를 토큰 새로 고침
import {Observable} from 'rxjs/Observable';
import {Injectable} from '@angular/core';
import {HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpErrorResponse, HttpParams} from '@angular/common/http';
import {SessionStorageService} from 'ng2-webstorage';
@Injectable()
export class HttpInterceptorService implements HttpInterceptor {
constructor(private sessionStorage: SessionStorageService) {
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const url = '/';
req = req.clone({
url: url + req.url,
headers: req.headers.set('Authorization', this.sessionStorage.retrieve('access_token'))
});
return next.handle(req).catch(err => {
if (err instanceof HttpErrorResponse) {
console.log('interceptor error');
console.log(err);
if (err.status === 401) {
return Observable.throw(err);
}
}
});
}
}
나는 만료 된 때 전류 (PARAMS 일부 'URL'에 최종 요청) 새로운 토큰을 얻을 수있다 필요로하고 내가 어떤에 응답 (401)을받을 경우 요청한 다음 새로운 토큰을 얻을 때까지 요청 (및 다른 모든 요청)을 보류하십시오. 그리고 refresh_token도 만료 되었으면 (또한 401이 붙은 경우) 다른 작업을 수행하십시오.
params: new HttpParams().set('Token', this.sessionStorage.retrieve('refresh_token'))
새 토큰 요청 방법을 이해할 수 없습니다. 내가
if (err.status === 401) {
const params = new HttpParams().set('token', this.sessionStorage.retrieve('refresh_token'));
req = req.clone({
method:'post',
url: url + '/auth/refresh',
params: params,
headers: req.headers.set('Authorization', this.sessionStorage.retrieve('refresh_token'))
});
next.handle(req).subscribe(res => {
console.log('res',res);
});
return Observable.throw(err);
}
다음했다하지만 내 데이터에 대한 body
및 기타 불필요한와 res
있어 무엇
. body
에서 data
만 수신하려면 어떻게해야합니까?
Property '_body' does not exist on type 'HttpEvent<any>'.
Property '_body' does not exist on type 'HttpSentEvent'.
res['body']
내게하는 데 도움이 : 나는 res.body
또는 res._body
또는 res.text()
처럼 뭔가를하려고 할 때
나는 같은 오류가 발생했습니다. 하지만 문자열 데이터가 있습니다. 내가 시도한 때 JSON.parse(res['body']);
내 요청 상태는 cancel
입니다. 그리고 나는 그 요청을 할 수 없다.
if (res instanceof HttpResponse) {
const body = res.body;
// to something with the response body
}
더
가 docs에서 찾을 수 있습니다 :
당신은 시도 할 수 있습니다 : 당신이'401'을 받고 있다면'res.json는()' – edkeveked
는'HttpErrorResponse' 유형을 처리해야 의미합니다. 그 중 하나는 당신이 필요로하는'error' 특성을 가지고 있습니다 : 그것은 오류 응답 본문에서 반환 된 어떤 서버를 포함합니다. ref : https://angular.io/api/common/http/HttpErrorResponse (설명 섹션 참조) –