在 AngularJS SPA 中使用刷新令牌
Posted
技术标签:
【中文标题】在 AngularJS SPA 中使用刷新令牌【英文标题】:Using refresh tokens within AngularJS SPA 【发布时间】:2018-12-27 10:58:25 【问题描述】:通过 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;
【问题讨论】:
【参考方案1】:只需增强您的refreshSession
方法,它就不会刷新几次。
var refreshPromise;
refreshSession: () =>
if (!refreshPromise)
refreshPromise = $http.get(...);
refreshPromise.finally(() => refreshPromise = null);
return refreshPromise;
【讨论】:
以上是关于在 AngularJS SPA 中使用刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章