Angular - Повторите запрос на перехватчик, не входя в подписку - PullRequest
0 голосов
/ 14 октября 2019

Я реализую 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

...