Angular 6 перехватывает ответ и обновляет токен Google-sign oauth2 - PullRequest
0 голосов
/ 11 октября 2019

Я занимаюсь разработкой Angular 6 сети, которая использует rxjs 6 . Я использую вход Google Oauth2 для аутентификации и их клиентской библиотеки gapi . Эта библиотека gapi имеет метод для входа в систему , который возвращает объект типа GoogleUser , который имеет метод для обновления его токена , напримерметод называется reloadAuthResponse () , который возвращает обещание с новым access_token .

Теперь, что я хочу сделать в моем перехватчике в Angular, это когда я получаюОтвет с кодом 401, я должен вызвать вышеупомянутый метод, чтобы обновить токен доступа и затем повторить вызов. У меня возникли две проблемы:

  1. Поскольку метод токена обновления возвращает обещание, я не знаю, как его обработать, чтобы повторить мой исходный запрос.
  2. Код внутри tap выполняется дважды.

Мой код перехватчика таков:

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)
            .pipe(
                tap((event: HttpEvent<any>) => {
                    console.log("todo va bien")

                    return event;
                }, (error: HttpErrorResponse) => {
                    console.log("mal")
                    console.log(error)

                    // Solicitamos un nuevo token para que no nos cierre sesion
                    if (error.status == 401) {
                        console.log("solicitando nuevo token")
                        this._sesionService.getGoogleUser().reloadAuthResponse()
                            .then((authResponse: AuthResponse) => {
                                console.log("nuevo token")
                                console.log(authResponse)
                                this._sesionService.setAccessToken(authResponse.access_token);
                                console.log(authResponse.access_token)
                                return next.handle(request);
                            }).catch(e => {
                                console.log("jajajaja")
                                console.log(e)
                            });
                    }
                })
            );
    }

Что мне нужно изменить, чтобы это исправить?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...