在 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;
}