在AngularJS SPA中使用刷新令牌



通过AngularJS中的刷新令牌请求新的JWT身份验证令牌的正确方法是什么?

我已经有了一个实现,在每个API请求上,它检查会话是否需要刷新,如果需要,则从Web服务器请求一个新的令牌。但是,如果一个页面一次进行3次调用,它会为每个调用请求一个新的刷新令牌,这似乎是不正确的——我认为它应该只更新一次令牌。

有没有办法阻止其他调用,或者我应该在一个间隔内进行刷新,而不是通过拦截器进行刷新?

拦截器请求方法

request = (config: angular.IRequestConfig) => {
this.setBearerToken(config);
var responsePromise = this.$q.when(config);
if (config.url !== this.tokenUrl) {
const factSession = this.$injector.get("factSession") as Session;
if (factSession.shouldRefreshToken()) {
responsePromise = factSession
.refreshSession()
.then(() => {
this.setBearerToken(config);
return config;
});
}
}
return responsePromise;
}

只需增强refreshSession方法,它就不会刷新多次。

var refreshPromise;
refreshSession: () => {
if (!refreshPromise) {
refreshPromise = $http.get(...);
refreshPromise.finally(() => refreshPromise = null);
}
return refreshPromise;
}

最新更新