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

Synchronous calls until the user is authenticated as visitor with angular

本文关键字:angular 验证 访问者 用户 调用 同步      更新时间:2023-09-26

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

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

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

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

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

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

感谢您提前提供的帮助!

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

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

设置$http请求时,可以传入一个可选的"config"对象。这个配置对象有一个timeout属性,您可以为它提供promise。当这个承诺得到解决时,您的$http请求将被中止。

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

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