搞了半天也没找到刷新token的办法 TTL:30分钟 刷新TTL:2周
如果我在 45 分钟 innactive 后刷新页面,那么我会创建一个 getAccessToken() 函数来发送过期的令牌,然后将刷新的令牌发回给我。最大的问题是,如果我的页面发出超过 1 个 ajax 请求,那么如果第一个请求使我的令牌无效,那么第二个请求会强制我重新登录,因为它发送空令牌
@NgModule({
providers: [
{
provide: AuthHttp,
useFactory: authHttpServiceFactory,
deps: [Http, RequestOptions, Router]
}
]
})
export function authHttpServiceFactory(http: Http, options: RequestOptions, router: Router) {
return new AuthHttp(new AuthConfig({
tokenName: 'token',
tokenGetter: (() => getAccessToken(http,router)),
//tokenGetter: (() => localStorage.getItem('JWToken')),
globalHeaders: [{'Content-Type': 'application/json'}],
noJwtError: true,
}), http, options);
}
function getAccessToken(http: Http, router:Router): Promise<string> {
let jwtHelper: JwtHelper = new JwtHelper();
let accessToken = localStorage.getItem('JWToken');
if( accessToken == '' || !accessToken || accessToken == undefined || accessToken == null){
router.navigate(['./admin/login']);
return;
}
if (jwtHelper.isTokenExpired(accessToken)) {
return new Promise((resolve, reject) => {
let refreshTokenService: RefreshTokenService = new RefreshTokenService(http);
refreshTokenService.refreshToken(accessToken).subscribe((res: any) => {
res = res.json();
if(res.token) {
localStorage.setItem('JWToken', res.token);
resolve(res.token);
}else{
localStorage.removeItem('JWToken');
router.navigate(['./admin/login']);
}
});
});
} else {
return Promise.resolve(accessToken);
}
}
我希望请求等待第一个请求的响应