在 AngularJS SPA 中使用刷新令牌
Using refresh tokens within AngularJS SPA
在 AngularJS 中通过刷新令牌请求新的 JWT 身份验证令牌的正确方法是什么?
我已经有一个实现,在每个 API 请求中,检查会话是否需要刷新,如果需要,则从网络服务器请求一个新令牌。但是,如果一个页面一次进行 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;
}
在 AngularJS 中通过刷新令牌请求新的 JWT 身份验证令牌的正确方法是什么?
我已经有一个实现,在每个 API 请求中,检查会话是否需要刷新,如果需要,则从网络服务器请求一个新令牌。但是,如果一个页面一次进行 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;
}