同步调用,直到用户通过 angular 验证为访客

Synchronous calls until the user is authenticated as visitor with angular

我的问题是理论性的,而不是如何去做。我想知道专家们是如何处理我将在下面描述的情况的。

我有一个使用 Angular 和 Breeze 的 SPA。身份验证是基于令牌的。我在 Angular 中设置了一个拦截器,它负责处理请求是否包含令牌,如果服务器 returns 401 那么用户将被重定向到登录页面。 Breeze 使用与 Angular.

相同的 $http 实例

当应用程序启动时,它会向服务器发出 1-5 次请求,并且由于用户未通过身份验证,因此请求不包含令牌,因此应用程序将收到 401 并触发重定向。我计划每个用户都将被认证为只有很少授权的访客,或管理用户权限的注册用户。

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

对我来说,很明显我需要向服务器发出请求以了解用户是否已通过身份验证。我正在考虑提出一个请求,该请求将作为第一个被解雇。在它返回之前,不会触发对服务器的其他请求。由于 Angular 的 $http 不能设置为同步工作,我需要一个有标志的服务,直到标志为假,其他服务才能进行调用。但这似乎有点笨拙。

问题是这种情况是怎么处理的? 你有处理这种情况的博客吗?

提前感谢您的帮助!

你可以看看这个 Angular 拦截器实现,也许可以使用它 https://github.com/witoldsz/angular-http-auth

当初始请求因 401 问题而失败时,一旦用户通过身份验证,此拦截器具有重试机制。

当您设置 $http 请求时,您可以传入一个可选的 "config" 对象。此配置对象有一个超时 属性,您可以为其提供承诺。解决此承诺后,您的 $http 请求将被中止。

当您收到第一个 401 响应时,您可以将此概念用于 "cancel" 任何未完成的 $http 请求,然后将用户重定向到您需要的任何身份验证过程。

关于这个主题的博客 post 已经完成了大约 80%:http://jonnyknowsbest.co.uk/abort-cancelling-http-calls/