问题标签 [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.
javascript - 使用资源/拦截器处理 4XX http 代码
我需要一个处理 HTTP4XX
状态代码的解决方案。我曾经有一个这样的错误拦截器
在 HTML 中,错误显示如下
当显示错误时,用户必须再次登录(或其他方式):它会停止应用程序的流程。
但是我有很多资源,对于某些人来说可以显示这个错误消息,但其他人应该在错误回调中自己处理错误
解决这个问题的最佳策略/解决方案是什么?
angularjs - 当身份验证失败时,Angular $http 拦截器会打开多个模式
我正在使用来在失败$http interceptor
时显示登录模式。$auth
这是我的简要设置:
上面的代码工作正常。但是我遇到的问题是当api抛出多个身份验证失败错误时,拦截器同时打开了多个模态。通常在一页中,我可能有 2-3 次各种服务联系后端 api,当身份验证失败时,所有这些 api 在无效令牌期间返回身份验证失败错误。该拦截器将其作为 3 个 take_invalid 错误拾取,并在彼此之上显示 3 个登录模式 1。我该如何防止这种情况?
无论身份验证失败发生多少次,如何确保拦截器仅显示 1 个登录模式?
我的服务看起来像这样:
在服务中,我试图$rootScope.loginProgress
用作一个开关来确定登录模式是否打开。$rootScope.loginProgress
但是,如果模式已经打开(何时为真),我不确定如何返回一个空的承诺。
angularjs - http拦截器后Angular View不更新
我在控制器中使用 promise 在$http
请求后呈现视图。一切正常,除非在 401 错误期间涉及 http 拦截器。发生这种情况时,这就是我面临的问题:
http 拦截器从 api 获取 401 错误,将被拒绝的查询添加到缓冲区并显示登录模式。
登录成功后,再次尝试之前有401的排队api查询,api成功返回请求的数据。
然而发生的情况是,即使从 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 检查。这似乎在登录后正确更新了视图。但是,现在模式显示每个错误,而不仅仅是拒绝原因中列出的错误:
angularjs - 使用从服务器获得的值配置 angular $http
我正在构建我的(第一个)角度应用程序,它将令牌插入到标题中(显示的内容大部分取自这里)
angular.module('myApp')
我遇到的麻烦是SessionService
-如何通过调用服务器来初始化它?
例如,这不起作用:
因为它只是将我的 cpu 超载到 100%...
由于这是我的第一个 Angular 应用程序,我确定我遗漏了一些东西,但是……什么?
编辑:
对此事的另一种看法......虽然仍然不起作用......(再次,用完cpu,可能是无限循环)
javascript - Angular JS http拦截器异步调用无限循环
您好,我尝试在 AngularJS 中的 http 拦截器的响应方法中进行异步调用。异步调用被触发,但随后陷入无限循环,并且异步调用被一遍又一遍地调用......不知道为什么,我猜这个错误与我的异步调用的结构有关
app.service('Ace',['$http','$q','$injector', '$window', function($http, $q, $injector, $window){
javascript - AngularJS:如何保持“运行”方法直到它完成
我有一个简单的场景 - 我希望使用拦截器初始化我的 http 调用,它将在标头中添加一个值(某种令牌)。
问题是令牌也是通过http接收的(它应该是第一次调用),但我不知道如何让所有其他调用等待它完成,然后再发出自己的调用......
问题是TestCtrl
在方法完成获取令牌之前发出 http 调用run
(导致标头值具有[uninitialized-token]的值)。
如何让控制器等待“运行”异步方法完成?
angularjs - 角http拦截器
Angular http拦截器不适用于从拦截器内初始化的请求?
在我们的代码库中,对我们 api 的每个请求都有一个以 url 开头的 url,/api/
并且我们有一个拦截器,它使用我们 api 的实际地址更新这些请求(使得在开发和生产环境之间轻松切换一件事)。更新 url 后,如果存在访问令牌,拦截器还会添加 Authorization 标头。这一切都完美无缺。
但是,有时访问令牌已过期,但我们仍然有一个刷新令牌,在继续实际请求之前,我首先想向我们的 api 发出请求以获取新的访问令牌。
因此,在request
我们的拦截器部分,我们调用了一个负责刷新访问令牌的服务,并且在该then
方法返回的回调中,我们更新了原始请求的配置:
但是,登录服务发出的请求似乎没有应用拦截器,因此请求转到/api/login
而不是实际的 api 端点。
这是Angular的设计,当从拦截器的请求方法中发出新的http请求时不应用拦截器?
javascript - 拦截器 - 令牌 - AngularJS
我是 AngularJS 的新手,我创建的拦截器和 restAPI 有问题。
拦截器代码是这样的:
我创建的其余 api 调用与此类似:
如果我将 {headers: {'x-access-token': $localStorage.token}} 发送到 $http,restapi 可以正常工作,但如果我删除它,它会失败并出现错误 403(禁止)
我决定在所有 GET api 中添加它,但是对于 POST,它没有按我预期的那样工作。我的 POST api 如下所示:
我做错了什么?为了不在 GET 或 POST 操作中发送标头,我应该在拦截器中进行哪些更改?
angularjs - 标题的 Restangular 响应拦截器
我正在从角度应用程序到服务器端进行数据通信。服务器创建一个令牌并将其发送到标头中。我正在寻找使用 Restangular 拦截响应并将其保存在 localStorage 中的方法。我没有成功。
我在我的应用程序 .config 中做这样的事情
然后在 HttpInterceptor 中,我调用了 Storage 来存储 Header。但是我遇到了几个错误,无法弄清楚这一点。
提前致谢!
javascript - AngularJS:在第一次查询返回成功之前不加载视图(不是 401 响应)
在我的应用程序(用 yeoman 生成)中,我有这样的结构:
看法:
index.html
用于ng-view
渲染控制器视图
控制器:
每个控制器都尝试使用 api urlm 获取一些数据,例如:
所以在每个控制器中(+许多其他查询)
现在我有点困惑:如何不渲染任何东西,直到我的第一个请求得到 200 而不是 401?
这是我的拦截器:
所有的作品几乎都是“必须的”,但是......
每次,我都会加载我的 index.html(带有侧边栏、徽标等),然后我才尝试获取(例如)我的文章,然后,如果我得到 401,我会被重定向到auth-page
,这不太好:因为我看到所有样式的小闪烁,然后才登录页面。
是真的吗,首先检查,如果我得到 200,然后才使用侧边栏等渲染页面,如果不是:然后是 auth-page。
怎么做?
我在网上看到了一些解决方案,但它们都很大,我需要一些非常快速和简单的东西)