同步调用,直到用户被认证为具有角度的访问者

时间:2015-04-10 07:27:03

标签: javascript angularjs authentication

我的问题相当于理论而不是如何去做。我想知道专家如何管理我将在下面描述的情况。

我有一个使用Angular和Breeze的SPA。身份验证基于令牌。我在Angular中设置了一个拦截器,它关注请求包含令牌,如果服务器返回401,则用户将被重定向到登录页面。 Breeze使用与Angular相同的$ http实例。

当应用程序启动时,它向服务器发出1-5个请求,并且因为用户未经过身份验证,因此请求不包含令牌,因此应用程序获得401并且将触发重定向。我计划将每个用户都认证为具有非常少授权的访问者,或者用户管理用户权限的注册用户。

我的问题是,当第一个401结果返回时,我不知道哪一个将首先返回,重定向将被触发,但返回时剩余的结果会在控制台中抛出错误。我真的不喜欢它,我不喜欢不注意这些例外的方法。

对我而言,显然我需要向服务器请求以了解用户是否经过身份验证。我正在考虑提出一个将被解雇的请求。在它返回之前,其他对服务器的请求不会被解雇。由于Angular的$ http不能设置为同步工作,我需要一个有标志的服务,直到标志为假,其他服务无法拨打电话。但这似乎有点笨拙的解决方案。

问题是如何处理这样的情况? 你有博客处理这样的情况吗?

提前感谢您的帮助!

2 个答案:

答案 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/