Angularjs 使用刷新令牌时的拦截器循环依赖

Angularjs Interceptor Circular Dependency when using Refresh Tokens

长话短说,我的 angularjs 应用程序中有一个结构,基本上如下所示: 1.有一个'authService'负责请求访问令牌,刷新令牌。 2. 有一个 'authInterceptorService' 将令牌添加到请求的 header ,但是,棘手的部分在这里:此服务依赖于 authService,用于使用刷新令牌生成新的访问令牌如果访问令牌已过期且请求为 401en,这意味着最终将存在循环依赖,当我使用 $httpProvider 服务注册拦截器时:

authService <- authInterceptorService <- $http <- authService

我的问题是,当您的拦截器需要能够使用刷新令牌发出新的访问令牌并重新发送请求时,如何解决这个问题?

解决此问题的一种方法是使用 Angular 的事件系统。由于您正在处理服务,因此您可能需要在 $rootScope 上广播事件 ($emit) 并监听它 ($on)。

例如,您可以为调用令牌刷新服务的 'tokenExpired' 事件设置侦听器,该服务在成功时触发 'tokenRefreshed' 事件。当请求为 401 时,您会发出 tokenExpired 事件并为 tokenRefreshed 事件注册一个一次性侦听器,以便在刷新后重新发送请求。

也许不是最干净的解决方案,但我在处理粗糙的依赖链时使用了这样的设置并且效果很好。