HttpInterceptorを使用して401エラーをキャッチするための最初のコードを作成しようとしています。私がしたいことは、条件に応じて新しい認証トークンを作成し、それを使って再試行することです。しかし、現在私のコードは再試行を行いますが、新しい認証トークンが作成される前にそれを行います。ここに私のコードです:私はまだ活字体の構文に精通取得していますHttpInterceptorは角度4.3で再試行します
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<any> {
return next.handle(request).catch(error => {
if (error.status === 401) {
console.log('401 error');
//check for valid refresh token
let refreshToken = localStorage.getItem('refresh_token');
this._refreshTokenService.getRefreshToken(refreshToken).subscribe(
refreshToken => {
if (refreshToken != null) {
console.log('valid refresh token')
//if valid refresh token, relogin and create new auth token
console.log(localStorage.getItem('auth_token'));
this._userService.logout();
let email = localStorage.getItem('profile_email');
this._userService.autoLogin(email)
.subscribe(
result => {
if (result) {
console.log('new auth token created');
let auth_token = localStorage.getItem('auth_token');
//retry
request = request.clone({ headers: request.headers.set('Authorization', `Bearer ${auth_token}`) });
}
});
}
else {
console.log('invalid refresh token');
}
});
return next.handle(request);
}
else {
console.log(error.status);
}
});
}
は、私は新しいトークンを作成した後に再試行がのみ発生するために必要があると思うが、私はこれで正確な構文のを確認していません場合。どんな助けでも大歓迎です!
こんにちは、お返事に感謝:
あなたは、このようなチェーンあなたの観測をする必要があります。私は 'nexthandle(request)'の行をクローン行の直後に移動するようにしようとしましたが、これは構文エラー '型void ObservableInputに割り当てることができません。私は私の元の投稿にあるリターンラインを持つ必要があると思いますが、残りのコードが実行される前にそれが実行されないようにするにはどうしたらいいですか? –
user517406
また、私はあなたの例を試してみましたが、エラー 'タイプサブスクリプションはObservableInputタイプに割り当てられません'というエラーが出ます。これはおそらく解決するのは難しいことではありませんが、構文は私の頭の中で得るのは難しいです:) –
user517406