1
我正在使用JWT刷新令牌策略作爲身份驗證,並且在我的Angular客戶端中有一個攔截器將令牌作爲標頭髮送。Angular:刷新令牌只有一次
我在發送之前檢查過期時間,並在需要時使用我的refreshToken刷新令牌。
問題是發送2個(或更多)請求時,都嘗試刷新令牌。我需要一個函數,它發送刷新令牌的req,並且一次調用多次,只向服務器發送1個http req以進行刷新,並將新的更新的令牌返回給所有調用它的人。
這是我的攔截器:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const authService = this.inj.get(AuthService);
const token = authService.getToken();
// if no token or this is a refresh token req
if (!token || req.url.split('/').pop() === 'refreshToken') {
return next.handle(req);
}
const decoded = jwt.decode(token);
// if token expired
if (decoded.exp < (Date.now()/1000)) {
return authService.refreshJWTToken().concatMap((newToken) => {
const clonedReq = req.clone({
headers: req.headers.set('Authorization', 'JWT ' + newToken)
});
return next.handle(clonedReq);
});
}
const clonedReq = req.clone({ headers: req.headers.append('Authorization', 'JWT ' + token) });
return next.handle(clonedReq);
}
,我需要的是authService.refreshJWTToken()的功能;
我知道這是與Observables運營商有關,但我對此有點新。