【问题标题】:Re Initaite the last failed request after refresh token is provided提供刷新令牌后重新发起最后一次失败的请求
【发布时间】:2019-08-31 17:53:41
【问题描述】:

我的 Angular 4 应用程序一个接一个地向受 OAuth2 保护的 API 发送多个请求,当请求失败并显示 401 状态码时,我面临问题,我需要生成一个新的访问令牌并重新向 API 发起相同的请求,并将响应返回给正在等待它的方法。 1-所有请求一个接一个地失败-因此,为了保持其他请求继续进行,我添加了一个循环,该循环在令牌生成过程中保存到达服务器的请求 2-为了发起请求,我在块中再次添加了next.handle(request)行但没有工作,然后我尝试调用this.intercept(request,next)方法,即使它没有工作,之后我添加的最后一种方法是重新处理请求在错误块中,因此现在拦截方法的代码如下所示,但后来我意识到即使我重试处理请求,该请求也没有得到进一步处理。有几个教程只是简单地建议next.handle(request),但在我的情况下它并没有按预期工作。
只有我成功处理了失败请求之后的请求,因为在此之前会生成新的访问令牌,但失败的请求会直接丢弃。

请看link中的代码流程!

我已经花了很多时间在调试上

【问题讨论】:

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


    【解决方案1】:

    我能够通过在拦截方法中添加Observable.fromPromise 来实现这一点,然后调用一个返回承诺的方法,并且该方法被递归调用,直到我得到刷新令牌,但是在每次调用之间添加一个延迟,以便我最终不会多次递归调用。

    请参考link 我的代码。 如果遇到任何问题,请发表评论。

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

    【讨论】:

    • 我已经改变了方法并删除了导致所有同时请求失败但令牌被刷新的超时部分,并且所有被启动和失败的后续请求都被重新启动
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2014-12-20
    • 2016-01-05
    • 2019-12-03
    • 2023-03-16
    • 2017-12-25
    相关资源
    最近更新 更多