Angular-拦截器请求重试不输入订阅

时间:2019-10-14 16:11:34

标签: angular google-signin google-oauth2 angular-http-interceptors

我正在实现Oauth2,现在我正在使用刷新令牌部分。访问令牌过期后,我必须刷新它(这是一个承诺),然后重试原始请求。

使用我当前的代码,令牌已刷新,但是我的代码从不进入订阅的成功或错误回调。

我的代码是:

public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    request = request.clone({
        setHeaders: {
            Authorization: `Bearer ${this._sesionService.getAccessToken()}`
        }
    });

    console.log(request.url);

    return next.handle(request).catch(error => {
        if (error instanceof HttpErrorResponse) {
            if (error.status == 401) {
                // refrescamos la sesión
                return this.handle401Error(request.clone(), next);
            } else {
                return throwError(error);
            }
        }

        return throwError(error);
    });
}

private handle401Error(request: HttpRequest<any>, next: HttpHandler): Observable<any> {
    return from(
        this._sesionService
            .getGoogleUser()
            .reloadAuthResponse()
            .then((auth: AuthResponse) => {
                console.log('Token refrescado!');
                this._sesionService.setAccessToken(auth.access_token);
            })
    ).pipe(
        switchMap(() => {
            request = request.clone({
                setHeaders: {
                    Authorization: `Bearer ${this._sesionService.getAccessToken()}`
                }
            });

            console.log('Test interceptor');

            return next.handle(request);
        })
    );
}

我在这里想念什么?

我正在使用Angular 7和rxjs 6

0 个答案:

没有答案