JSFiddle - React, Tailwind, and code Playground
by matox
JavaScript
class AuthService {
public refreshToken(): Observable<BearerToken> {
const url = environment.host + '/users/refresh/';
return combineLatest(
this.tokenStorage.getAccessToken(),
this.tokenStorage.getRefreshToken()
).pipe(
switchMap(tokens => {
return this.http.post<BearerToken>(url, {
refresh_token: tokens[1],
client_id: this.CLIENT_ID,
grant_type: 'refresh_token'
});
}),
tap(_ => {
this.saveAccessData.bind(this);
this.retryFailedRequests();
})
);
}
});
}
class TokenInterceptor {
return this.auth.refreshToken().pipe(
switchMap((token: BearerToken) => {
if (token) {
this.tokenSubject.next(token.access_token);
return next.handle(
this.addTokenToRequest(request, token.access_token)
);
}
return <any>this.auth.logout();
}),
catchError(err => {
return <any>this.auth.logout();
}),
finalize(() => {
this.isRefreshingToken = false;
})
);
}