问题标签 [angular-http-interceptors]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
61 浏览

javascript - 使用资源/拦截器处理 4XX http 代码

我需要一个处理 HTTP4XX状态代码的解决方案。我曾经有一个这样的错误拦截器

在 HTML 中,错误显示如下

当显示错误时,用户必须再次登录(或其他方式):它会停止应用程序的流程。

但是我有很多资源,对于某些人来说可以显示这个错误消息,但其他人应该在错误回调中自己处理错误

解决这个问题的最佳策略/解决方案是什么?

0 投票
1 回答
560 浏览

angularjs - 当身份验证失败时,Angular $http 拦截器会打开多个模式

我正在使用来在失败$http interceptor时显示登录模式。$auth这是我的简要设置:

上面的代码工作正常。但是我遇到的问题是当api抛出多个身份验证失败错误时,拦截器同时打开了多个模态。通常在一页中,我可能有 2-3 次各种服务联系后端 api,当身份验证失败时,所有这些 api 在无效令牌期间返回身份验证失败错误。该拦截器将其作为 3 个 take_invalid 错误拾取,并在彼此之上显示 3 个登录模式 1。我该如何防止这种情况?

无论身份验证失败发生多少次,如何确保拦截器仅显示 1 个登录模式?

我的服务看起来像这样:

在服务中,我试图$rootScope.loginProgress用作一个开关来确定登录模式是否打开。$rootScope.loginProgress但是,如果模式已经打开(何时为真),我不确定如何返回一个空的承诺。

0 投票
2 回答
766 浏览

angularjs - http拦截器后Angular View不更新

我在控制器中使用 promise 在$http请求后呈现视图。一切正常,除非在 401 错误期间涉及 http 拦截器。发生这种情况时,这就是我面临的问题:

  1. http 拦截器从 api 获取 401 错误,将被拒绝的查询添加到缓冲区并显示登录模式。

  2. 登录成功后,再次尝试之前有401的排队api查询,api成功返回请求的数据。

  3. 然而发生的情况是,即使从 api 返回数据,角度视图也不会更新。视图仅在手动刷新该状态后更新。

这些是我的代码:

1)http拦截器:

http-auth-interceptor在这个使用

2)http拦截器手表:

3) 控制器:

在这里,DataService.fetchNamesList()从 api 执行获取请求。

如果针对上述情况触发了身份验证拦截器,我可以看到$http $_GET成功登录后再次尝试,但$scope.namesList视图中没有更新。

到目前为止我的想法是:

1)我正在考虑为上述内容添加一个额外$watch的内容,以便它在 http 拦截器之后工作。我想到了这一点,然后我放弃了该选项,因为如果我在一个页面中有多个获取请求(如仪表板),那么观察每个请求都会过火。

2)登录后手动刷新ui路由器状态,如下所示。这可行,但当视图涉及表单提交时,它没有帮助,其中完成的表单将在状态重新加载后被重置:

所以我确定如何解决这个问题。有人可以在这里指导我吗......

编辑: 在@ChrisFoster 在评论中提出建议后,我移动了return deferred.promise外部angular.forEach并稍微更改了 foreach 检查。这似乎在登录后正确更新了视图。但是,现在模式显示每个错误,而不仅仅是拒绝原因中列出的错误:

0 投票
2 回答
902 浏览

angularjs - 使用从服务器获得的值配置 angular $http

我正在构建我的(第一个)角度应用程序,它将令牌插入到标题中(显示的内容大部分取自这里

angular.module('myApp')

我遇到的麻烦是SessionService-如何通过调用服务器来初始化它?

例如,这不起作用:

因为它只是将我的 cpu 超载到 100%...

由于这是我的第一个 Angular 应用程序,我确定我遗漏了一些东西,但是……什么?

编辑
对此事的另一种看法......虽然仍然不起作用......(再次,用完cpu,可能是无限循环)

0 投票
1 回答
775 浏览

javascript - Angular JS http拦截器异步调用无限循环

您好,我尝试在 AngularJS 中的 http 拦截器的响应方法中进行异步调用。异步调用被触发,但随后陷入无限循环,并且异步调用被一遍又一遍地调用......不知道为什么,我猜这个错误与我的异步调用的结构有关

app.service('Ace',['$http','$q','$injector', '$window', function($http, $q, $injector, $window){

0 投票
1 回答
591 浏览

javascript - AngularJS:如何保持“运行”方法直到它完成

我有一个简单的场景 - 我希望使用拦截器初始化我的 http 调用,它将在标头中添加一个值(某种令牌)。

问题是令牌也是通过http接收的(它应该是第一次调用),但我不知道如何让所有其他调用等待它完成,然后再发出自己的调用......

问题是TestCtrl在方法完成获取令牌之前发出 http 调用run(导致标头值具有[uninitialized-token]的值)。

如何让控制器等待“运行”异步方法完成?

0 投票
1 回答
1208 浏览

angularjs - 角http拦截器

Angular http拦截器不适用于从拦截器内初始化的请求?

在我们的代码库中,对我们 api 的每个请求都有一个以 url 开头的 url,/api/并且我们有一个拦截器,它使用我们 api 的实际地址更新这些请求(使得在开发和生产环境之间轻松切换一件事)。更新 url 后,如果存在访问令牌,拦截器还会添加 Authorization 标头。这一切都完美无缺。

但是,有时访问令牌已过期,但我们仍然有一个刷新令牌,在继续实际请求之前,我首先想向我们的 api 发出请求以获取新的访问令牌。

因此,在request我们的拦截器部分,我们调用了一个负责刷新访问令牌的服务,并且在该then方法返回的回调中,我们更新了原始请求的配置:

但是,登录服务发出的请求似乎没有应用拦截器,因此请求转到/api/login而不是实际的 api 端点。

这是Angular的设计,当从拦截器的请求方法中发出新的http请求时不应用拦截器?

0 投票
0 回答
1050 浏览

javascript - 拦截器 - 令牌 - AngularJS

我是 AngularJS 的新手,我创建的拦截器和 restAPI 有问题。

拦截器代码是这样的:

我创建的其余 api 调用与此类似:

如果我将 {headers: {'x-access-token': $localStorage.token}} 发送到 $http,restapi 可以正常工作,但如果我删除它,它会失败并出现错误 403(禁止)

我决定在所有 GET api 中添加它,但是对于 POST,它没有按我预期的那样工作。我的 POST api 如下所示:

我做错了什么?为了不在 GET 或 POST 操作中发送标头,我应该在拦截器中进行哪些更改?

0 投票
1 回答
2074 浏览

angularjs - 标题的 Restangular 响应拦截器

我正在从角度应用程序到服务器端进行数据通信。服务器创建一个令牌并将其发送到标头中。我正在寻找使用 Restangular 拦截响应并将其保存在 localStorage 中的方法。我没有成功。

我在我的应用程序 .config 中做这样的事情

然后在 HttpInterceptor 中,我调用了 Storage 来存储 Header。但是我遇到了几个错误,无法弄清楚这一点。

提前致谢!

0 投票
1 回答
864 浏览

javascript - AngularJS:在第一次查询返回成功之前不加载视图(不是 401 响应)

在我的应用程序(用 yeoman 生成)中,我有这样的结构:

看法:

index.html用于ng-view渲染控制器视图

控制器:

每个控制器都尝试使用 api urlm 获取一些数据,例如:

所以在每个控制器中(+许多其他查询)

现在我有点困惑:如何不渲染任何东西,直到我的第一个请求得到 200 而不是 401?

这是我的拦截器:

所有的作品几乎都是“必须的”,但是......

每次,我都会加载我的 index.html(带有侧边栏、徽标等),然后我才尝试获取(例如)我的文章,然后,如果我得到 401,我会被重定向到auth-page,这不太好:因为我看到所有样式的小闪烁,然后才登录页面。

是真的吗,首先检查,如果我得到 200,然后才使用侧边栏等渲染页面,如果不是:然后是 auth-page。

怎么做?

我在网上看到了一些解决方案,但它们都很大,我需要一些非常快速和简单的东西)