我的问题相当于理论而不是如何去做。我想知道专家如何管理我将在下面描述的情况。
我有一个使用Angular和Breeze的SPA。身份验证基于令牌。我在Angular中设置了一个拦截器,它关注请求包含令牌,如果服务器返回401,则用户将被重定向到登录页面。 Breeze使用与Angular相同的$ http实例。
当应用程序启动时,它向服务器发出1-5个请求,并且因为用户未经过身份验证,因此请求不包含令牌,因此应用程序获得401并且将触发重定向。我计划将每个用户都认证为具有非常少授权的访问者,或者用户管理用户权限的注册用户。
我的问题是,当第一个401结果返回时,我不知道哪一个将首先返回,重定向将被触发,但返回时剩余的结果会在控制台中抛出错误。我真的不喜欢它,我不喜欢不注意这些例外的方法。
对我而言,显然我需要向服务器请求以了解用户是否经过身份验证。我正在考虑提出一个将被解雇的请求。在它返回之前,其他对服务器的请求不会被解雇。由于Angular的$ http不能设置为同步工作,我需要一个有标志的服务,直到标志为假,其他服务无法拨打电话。但这似乎有点笨拙的解决方案。
问题是如何处理这样的情况? 你有博客处理这样的情况吗?
提前感谢您的帮助!
答案 0 :(得分:2)
那么你可以看看这个Angular拦截器实现,也许可以使用它https://github.com/witoldsz/angular-http-auth。
一旦用户通过身份验证,当初始请求因401问题而失败时,此拦截器具有重试机制。
答案 1 :(得分:0)
当您设置$ http请求时,您可以传入一个可选的" config"宾语。此配置对象具有超时属性,您可以为其提供承诺。解决此承诺后,您的$ http请求将被中止。
您可以使用此概念来取消"当您收到第一个401响应然后将用户重定向到您需要的任何身份验证过程时,任何未完成的$ http请求。
通过完成关于这个主题的博客文章,我大约有80%的时间:http://jonnyknowsbest.co.uk/abort-cancelling-http-calls/