Перед каждым запросом HTTP-перехватчик проверяет, не истек ли токен доступа, и если да, то сначала обновляет токен, а затем продолжает запрос.
Проблема на страницах с несколькими запросами. На этих страницах перехватчик пытается обновить токен для каждого запроса.
Как я могу поделиться запросом на продление токена в этом случае?
Метод, который отвечает за обновление токена, таков:
renewToken() {
let refreshToken = // get refresh token
let accessToken = // get access token
if (!refreshToken || !accessToken)
return;
let requestData = {
accessToken: accessToken,
refreshToken: refreshToken
}
return this.http.post<ApplicationToken>(`${this.baseUrl}/renewToken`, requestData)
.pipe(
// I tried share() shareReplay(1) and publishReplay(1) here but no luck
);
}
И вот как перехватчик использует этот метод:
...
// in case we need to renew the token
return this.accountService.renewToken()
.pipe(
switchMap(t => {
this.accountService.saveToken(t);
token = this.accountService.getAccessToken();
var newReq = this.setToken(req, token);
return next.handle(newReq);
})
);
...