私はこのインターセプタがあります: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
です。そして私はその要求をすることができません。あなたは、あなたがしなければならない実際の応答イベントに興味があるなら
'res.json()' – edkeveked
は、 'HttpErrorResponse'型を扱わなければならないことを意味する' 401'を取得していれば試すことができます。これはあなたが必要とするプロパティー 'error'を持っています。エラー応答本体に返されたサーバーを含みます。 ref:https://angular.io/api/common/http/HttpErrorResponse(説明のセクションをご覧ください) –