提供刷新令牌后重新初始化上一个失败的请求

时间:2019-04-10 09:57:23

标签: angular oauth-2.0 angular-http-interceptors

我有我的angular 4应用程序,它一次又一次向受OAuth2保护的API发送多个请求,当请求失败并显示401状态代码时,我遇到了问题,我需要生成一个新的访问令牌然后向API重新发起相同的请求,并将响应返回给正在等待的方法。 1-所有请求都一次失败-因此,为了保留其他要继续的请求,我添加了一个循环,当令牌生成过程中,该循环保存进入服务器的请求 2-为了启动请求,我在代码块中再次添加了行next.handle(request),但没有用,然后我尝试调用this.intercept(request,next)方法,即使它没有用,之后我添加的最后一个方法是重新在错误块中处理该请求,因此现在拦截方法的代码如下所示,但随后我意识到即使我重试处理该请求,该请求甚至都无法得到进一步处理。有几个教程只是建议next.handle(request),但就我而言,它不能按预期工作。
只有我能成功处理失败请求之后的请求,因为直到那时为止,都会生成新的访问令牌,但是失败的请求只会丢失。

请查看link中的代码流!

我已经花了很多时间进行调试

1 个答案:

答案 0 :(得分:0)

我能够通过在拦截方法中添加Observable.fromPromise然后调用一个返回promise的方法来实现此目的,然后递归调用该方法,直到获得刷新令牌为止,但是在每次调用之间增加了延迟这样我就不会多次递归调用。

请参考此link以获取我的代码。 如有任何问题,请发表评论。

参考:https://www.illucit.com/en/angular/angular-5-httpinterceptor-add-bearer-token-to-httpclient-requests/