问题标签 [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 - 将 $http 拦截器创建为独立模块时,Angular 中的依赖错误
这是我如何设置拦截器的工作示例,该拦截器将身份验证令牌附加到每个请求(这或多或少是来自https://docs.angularjs.org/api/ng/service/ $http 的示例)
我的config
和run
块中有很多其他的东西,它们从不同的角度模块调用和启动服务,所以我想稍微整理一下。但是我知道块中的依赖注入有一些非常具体的规则config
,我不太理解,这些规则阻止我authInterceptor
在单独的模块中定义我的工厂。当config
andrun
块中的其他逻辑调用应用程序中的其他模块时,在那里声明该拦截器看起来不合适。
这就是我想要做的:
我尝试将它注入到run
块中,但我猜你不允许在$httpProvider
那里注入:
我应该在哪里注入模块以便$httpProvider
也可以注入,我应该在哪里将拦截器添加到现有的?我的主要目标是将拦截器和其他类似服务保留在它们自己的自包含模块中。
编辑
provider
当我声明 a而不是时,我得到一个不同的错误,这似乎让我更接近factory
(出于某种原因,我一直认为这些是可以互换的):
所以它现在成功注入authInterceptor
到我的config
块中,但在尝试查找时失败$q
。
angularjs - 无法在 AngularJS 控制器中捕获事件
我正在尝试实现用户身份验证系统。我已阅读有关401
http 状态代码和HTTP Auth Interceptor Module的信息。
我已经用 bower 下载了模块并将其加载到我的应用程序模块中。我还没有使用它,但是当用户在浏览器中打开应用程序时,我想使用这个模块触发的相同事件来显示用户登录弹出窗口。
我所有的控制器都是CoreController
. CoreController
解析当前用户。当应用程序加载时没有用户登录,所以我想显示发出事件的登录表单:(event:auth-loginRequired
与 http-auth-interceptor 相同)。
在这个CoreController
我有另一个规则是监听这个特定的事件(event:auth-loginRequired
)。如果检测到此事件,控制器将显示调用其state
ID 的弹出窗口。
我遇到的问题是控制台说我已经正确地发出了事件,但是我的监听器没有被触发,所以登录弹出窗口没有显示。
这是我的CoreController
:
我究竟做错了什么?
干杯,马克西姆
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
angularjs - http-auth-interceptor 未正确设置标头
我有 2 个使用http-auth-interceptor 的问题。先说第一个吧。
当 API 返回 401(第一次)时,应用程序
/li>event:auth-loginRequired
在 index.html 中的指令中捕获事件并显示模式以便用户可以登录。然后在身份验证成功时,登录脚本正在调用authService.loginConfirmed(user, httpConfigCallback())
. 在回调中,我设置了 2 个 HTTP 标头以更新 API 令牌。问题是当初始请求出队时我看不到标头集。这是我的代码:
但未设置标题:
- 我遇到的第二个问题是出队请求返回 401,但指令不再捕获它,因此它不显示登录屏幕。
angularjs - 在 grails 应用程序中调用 spring security rest 插件登录时出现 401 未经授权的错误
我有一个带有 mongodb 作为数据源的 grails 应用程序,带有 spring security rest 插件。使用 angularjs,我尝试使用 $http.post 调用登录用户,但在浏览器控制台上收到 401 未经授权的错误。
这是我对 spring security rest 插件的 grail 配置:
我调用通过 angularjs $http 服务登录:
错误:
有什么建议么?
angularjs - 是否可以使用拦截器向 Angular $http 请求添加 GET/POST 参数
假设我需要在用户发出的每个请求中包含一个 GroupId 参数,但我不想修改每个服务调用以包含该参数。是否可以使 GroupId 自动附加到所有请求,无论是 POST 还是 GET 查询字符串?
我一直在研究拦截器request
功能,但不知道如何进行更改
** 编辑 **
下面的当前工作示例是 Morgan Delaney 和 haimlit 的建议的组合(我认为无论如何它是一个组合)。基本思想是,如果请求是 POST,则修改config.data
. 对于 GET,修改params
. 到目前为止似乎工作。
仍然不清楚提供程序系统如何在 Angular 中工作,所以我不确定在这里修改 data.params 属性是否完全合适。
angularjs - AngularJS 请求拦截器和 http-auth-interceptor
如果用户未登录,我正在使用https://github.com/witoldsz/angular-http-auth非常成功地弹出一个模式。我试图抢占所有请求,即使用户不在t 认证。目前,当用户点击应用程序时,它会按预期弹出模式,但在成功登录后,重新发送缓冲的请求会返回以下错误:
代码似乎缓冲了两个模板请求,然后弹出模式。成功通过模式后,sendReq 在两个缓冲的请求上运行,以及这些请求的返回,以及 urlIsSameOrigin 中的这些请求错误。有人有什么建议吗?这是我的模块:
javascript - 在 AngularJS 中管理受限页面的拦截器
几天前我刚开始使用 AngularJS,我的拦截器遇到了问题,它从服务器响应中拦截 401 状态。
当返回 401 并在该事件上触发重定向时,它会广播类型为“loginRequired”的消息。
问题是,如果我在未登录的情况下尝试访问受限页面,我会在重定向到登录页面之前看到页面闪烁片刻。我仍然是异步东西,承诺等方面的初学者。有人能指出我做错了什么吗?
这是我的拦截器。如您所见,它非常简单,但我将其精简以解释我的观点,并且在进一步开发之前尝试理解事物。
拦截器
我的拦截器的注入
受限页面的路由
受限页面控制器
$rootScope 事件观察器
我的问题显然与我处理拦截器和 $q 的方式有关。我在github上找到了另一种创建拦截器的方式,但这不是官方文档使用的方式,所以我认为这可能是旧方式,在我看来它不如将它放在工厂中那么干净。他只是在他的模块的配置函数中定义了路由之后才放了这段代码。但是这段代码有效,我没有得到页面闪存。
我在 Github 上找到的另一种方法
但我的目标不仅仅是“让它发挥作用”,而且我讨厌“如果它没有坏就不要修复它”的口头禅。我想了解我的代码有什么问题。谢谢!
javascript - 如何创建 $resource 自定义配置参数以在拦截器中读取
我想创建一个只对特定$resource
调用采取行动的拦截器。我希望$resource
调用本身指定是否应该拦截它们,而不是创建和维护一个大的白名单或黑名单供拦截器参考。
例如,使用$http
你可以这样做:
然后在拦截器中:
但是,$resource
没有参数来指定这样的配置对象。我怎样才能做到这一点,$resource
而不是$http
?
javascript - 检测 Angular JavaScript 承诺链中是否存在下一个处理程序
给定以下两个$resource
示例:
[注意:示例 2 不包含错误处理程序]
还有一个位于所有$http
请求下方的拦截器:
$promise.then()
当示例资源不包含错误回调时,如何使拦截器不拒绝?如果回调存在,exampleOne
那么我希望拒绝,但如果不存在,exampleTwo
那么我希望重定向到错误页面,从而将条件更改为:
为什么?因为我的项目中只有某些情况需要400
以用户友好的方式处理,因此我想消除许多重复的错误回调或不得不在拦截器中放置一个不常见情况的列表。我希望拦截器能够根据承诺链中另一个处理程序的存在做出决定。