Как реализовать refre sh токенов в angular? - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь реализовать refre sh токены в моем angular приложении. Я написал перехватчик http, который пытается получить новый токен доступа всякий раз, когда я получаю ошибку 401. Я не знаю почему, но это не работает. Я все еще получаю ответ 401.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Генерация refreshToken перед запросом, если это необходимо

export class HttpRequestInterceptor implements HttpInterceptor {
constructor(private router: Router, private service: AuthService) { }

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<any> {

    return from(this.tokenHandler(request)).pipe(mergeMap((req: HttpRequest<any>) => {
        return next.handle(req).pipe(catchError(err => {
            if ([401].indexOf(err.status) != -1) {
                // auto logout if 401 response returned from api
            }                
            else {                    
                throw err;
            }

            return EMPTY;
        }));
    }));
}

private async tokenHandler(request: HttpRequest<any>): Promise<HttpRequest<any>> {
    if (request.url.indexOf("REFRESHTOKEN_URL") == -1) {
        await this.service.GenerateNewTokenIfNeed(); //Important this function would be async and put httpClient call to ToPromise() and await it. Save token somewhere and get from there to #token# place
    }
    else {
        //RefreshTokenRequest
    }

    const authReq = request.clone({
        setHeaders: {
            Authorization: "Bearer #token#"
        },
    });

    return authReq;
}
0 голосов
/ 02 февраля 2020

Необходимо проверить, является ли код ответа 401, затем запросить токен refre sh и дождаться ответа после получения ожидающих запросов процесса ответа. refre sh токен с http-перехватчиком

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