问题标签 [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 投票
1 回答
8451 浏览

javascript - 将 $http 拦截器创建为独立模块时,Angular 中的依赖错误

这是我如何设置拦截器的工作示例,该拦截器将身份验证令牌附加到每个请求(这或多或少是来自https://docs.angularjs.org/api/ng/service/ $http 的示例)

我的configrun块中有很多其他的东西,它们从不同的角度模块调用和启动服务,所以我想稍微整理一下。但是我知道块中的依赖注入有一些非常具体的规则config,我不太理解,这些规则阻止我authInterceptor在单独的模块中定义我的工厂。当configandrun块中的其他逻辑调用应用程序中的其他模块时,在那里声明该拦截器看起来不合适。

这就是我想要做的:

我尝试将它注入到run块中,但我猜你不允许在$httpProvider那里注入:

我应该在哪里注入模块以便$httpProvider也可以注入,我应该在哪里将拦截器添加到现有的?我的主要目标是将拦截器和其他类似服务保留在它们自己的自包含模块中。

编辑

provider当我声明 a而不是时,我得到一个不同的错误,这似乎让我更接近factory(出于某种原因,我一直认为这些是可以互换的):

所以它现在成功注入authInterceptor到我的config块中,但在尝试查找时失败$q

0 投票
1 回答
5519 浏览

angularjs - 无法在 AngularJS 控制器中捕获事件

我正在尝试实现用户身份验证系统。我已阅读有关401http 状态代码和HTTP Auth Interceptor Module的信息。

我已经用 bower 下载了模块并将其加载到我的应用程序模块中。我还没有使用它,但是当用户在浏览器中打开应用程序时,我想使用这个模块触发的相同事件来显示用户登录弹出窗口。

我所有的控制器都是CoreController. CoreController解析当前用户。当应用程序加载时没有用户登录,所以我想显示发出事件的登录表单:(event:auth-loginRequired与 http-auth-interceptor 相同)。

在这个CoreController我有另一个规则是监听这个特定的事件(event:auth-loginRequired)。如果检测到此事件,控制器将显示调用其stateID 的弹出窗口。

我遇到的问题是控制台说我已经正确地发出了事件,但是我的监听器没有被触发,所以登录弹出窗口没有显示。

这是我的CoreController

我究竟做错了什么?

干杯,马克西姆

0 投票
1 回答
687 浏览

angularjs - How to use http-auth-interceptor with directive

I'm using http-auth-interceptor to ask user authentication. I'm also using ui-router to handle the routes of my application. Until now I had a CoreController as a top level controller associated with the ui-router state: "core".

All the routes from my application are child states for this core state (which is abstract). So for instance I have core.user, core.user.show, core.settings, ...

Everything was working pretty well until I add a resolve parameter for one of my route. core.user has now have a resolve parameter that is requesting data from an API, this API return a 401 if the user is not authenticated correctly.

The problem is that the listener for the event:auth-loginRequired is in my CoreController (top level controller) which is not loaded because the resolve is not satisfy in my child state, so the event is not triggered.

I deducted that I cannot have my event listener in this CoreController and start implementing a directive to catch this event. Here is what I have at the moment:

I use to have this state to trigger my login modal:

And here is the directive I'm trying to build:

But I end up with an error I previously had in my state provider:

Template for directive 'loginDialog' must have exactly one root element. modules/user/views/login.html

Not sure how to handle this, Cheers,

Maxime

0 投票
2 回答
1611 浏览

angularjs - http-auth-interceptor 未正确设置标头

我有 2 个使用http-auth-interceptor 的问题。先说第一个吧。

  • 当 API 返回 401(第一次)时,应用程序event:auth-loginRequired在 index.html 中的指令中捕获事件并显示模式以便用户可以登录。然后在身份验证成功时,登录脚本正在调用authService.loginConfirmed(user, httpConfigCallback()). 在回调中,我设置了 2 个 HTTP 标头以更新 API 令牌。问题是当初始请求出队时我看不到标头集。这是我的代码:

    /li>

但未设置标题:

在此处输入图像描述

  • 我遇到的第二个问题是出队请求返回 401,但指令不再捕获它,因此它不显示登录屏幕。
0 投票
2 回答
2357 浏览

angularjs - 在 grails 应用程序中调用 spring security rest 插件登录时出现 401 未经授权的错误

我有一个带有 mongodb 作为数据源的 grails 应用程序,带有 spring security rest 插件。使用 angularjs,我尝试使用 $http.post 调用登录用户,但在浏览器控制台上收到 401 未经授权的错误。

这是我对 spring security rest 插件的 grail 配置:

我调用通过 angularjs $http 服务登录:

错误:

有什么建议么?

0 投票
1 回答
6556 浏览

angularjs - 是否可以使用拦截器向 Angular $http 请求添加 GET/POST 参数

假设我需要在用户发出的每个请求中包含一个 GroupId 参数,但我不想修改每个服务调用以包含该参数。是否可以使 GroupId 自动附加到所有请求,无论是 POST 还是 GET 查询字符串?

我一直在研究拦截器request功能,但不知道如何进行更改

** 编辑 **

下面的当前工作示例是 Morgan Delaney 和 haimlit 的建议的组合(我认为无论如何它是一个组合)。基本思想是,如果请求是 POST,则修改config.data. 对于 GET,修改params. 到目前为止似乎工作。

仍然不清楚提供程序系统如何在 Angular 中工作,所以我不确定在这里修改 data.params 属性是否完全合适。

0 投票
0 回答
2418 浏览

angularjs - AngularJS 请求拦截器和 http-auth-interceptor

如果用户未登录,我正在使用https://github.com/witoldsz/angular-http-auth非常成功地弹出一个模式。我试图抢占所有请求,即使用户不在t 认证。目前,当用户点击应用程序时,它会按预期弹出模式,但在成功登录后,重新发送缓冲的请求会返回以下错误:

代码似乎缓冲了两个模板请求,然后弹出模式。成功通过模式后,sendReq 在两个缓冲的请求上运行,以及这些请求的返回,以及 urlIsSameOrigin 中的这些请求错误。有人有什么建议吗?这是我的模块:

0 投票
1 回答
1501 浏览

javascript - 在 AngularJS 中管理受限页面的拦截器

几天前我刚开始使用 AngularJS,我的拦截器遇到了问题,它从服务器响应中拦截 401 状态。

当返回 401 并在该事件上触发重定向时,它会广播类型为“loginRequired”的消息。

问题是,如果我在未登录的情况下尝试访问受限页面,我会在重定向到登录页面之前看到页面闪烁片刻。我仍然是异步东西,承诺等方面的初学者。有人能指出我做错了什么吗?

这是我的拦截器。如您所见,它非常简单,但我将其精简以解释我的观点,并且在进一步开发之前尝试理解事物。

拦截器

我的拦截器的注入

受限页面的路由

受限页面控制器

$rootScope 事件观察器

我的问题显然与我处理拦截器和 $q 的方式有关。我在github上找到了另一种创建拦截器的方式,但这不是官方文档使用的方式,所以我认为这可能是旧方式,在我看来它不如将它放在工厂中那么干净。他只是在他的模块的配置函数中定义了路由之后才放了这段代码。但是这段代码有效,我没有得到页面闪存。

我在 Github 上找到的另一种方法

但我的目标不仅仅是“让它发挥作用”,而且我讨厌“如果它没有坏就不要修复它”的口头禅。我想了解我的代码有什么问题。谢谢!

0 投票
0 回答
87 浏览

javascript - 如何创建 $resource 自定义配置参数以在拦截器中读取

我想创建一个只对特定$resource调用采取行动的拦截器。我希望$resource调用本身指定是否应该拦截它们,而不是创建和维护一个大的白名单或黑名单供拦截器参考。

例如,使用$http你可以这样做:

然后在拦截器中:

但是,$resource没有参数来指定这样的配置对象。我怎样才能做到这一点,$resource而不是$http

0 投票
2 回答
894 浏览

javascript - 检测 Angular JavaScript 承诺链中是否存在下一个处理程序

给定以下两个$resource示例:

[注意:示例 2 不包含错误处理程序]

还有一个位于所有$http请求下方的拦截​​器:

$promise.then()当示例资源不包含错误回调时,如何使拦截器不拒绝?如果回调存在,exampleOne那么我希望拒绝,但如果不存在,exampleTwo那么我希望重定向到错误页面,从而将条件更改为:

为什么?因为我的项目中只有某些情况需要400以用户友好的方式处理,因此我想消除许多重复的错误回调或不得不在拦截器中放置一个不常见情况的列表。我希望拦截器能够根据承诺链中另一个处理程序的存在做出决定。