长话短说,我在angularjs app中有一个结构,基本上如下: 1.有一个'authService'负责请求访问令牌和刷新令牌。 2.有一个'authInterceptorService'将令牌添加到请求的标头中,但是,棘手的部分在这里:此服务依赖于authService,用于在访问令牌为的情况下使用刷新令牌生成新的访问令牌。已过期且请求为401en,这意味着当我使用$ httpProvider服务注册拦截器时,最终将存在循环依赖:
authService< - authInterceptorService< - $ http< - authService
我的问题是,当您的拦截器需要能够使用刷新令牌发出新的访问令牌并重新发送请求时,如何解决此问题?
答案 0 :(得分:1)
解决这个问题的一种方法是使用Angular的事件系统。由于您正在处理服务,您可能需要在$ rootScope上广播事件($ emit)并监听它($ on)。
例如,您可以为“令牌已过时”设置听众。调用令牌刷新服务的事件,当成功触发“令牌刷新”时事件。当请求为401时,您发出tokenExpired事件并为tokenRefreshed事件注册一次性侦听器,以便在刷新后重新发送请求。
也许不是最干净的解决方案,但我在处理粗糙的依赖链时使用了类似这样的设置,而且效果非常好。