AngularJS成功401拦截还是抛出401

Posted

技术标签:

【中文标题】AngularJS成功401拦截还是抛出401【英文标题】:AngularJS Successful 401 Intercept Still Throws 401 【发布时间】:2015-04-07 04:04:43 【问题描述】:

我有一个工作的角度拦截器服务,它在从服务调用接收到 401 响应时重定向到登录页面

问题是 401 在 Google Chrome 控制台中仍显示为 javascript 错误

GET http://domain:port/api/url 401 (Unauthorized) ... angular.js:9658

这是 chrome 的一个功能,还是我需要以其他方式处理?

我的工作拦截服务的内容如下

var _request = function (config) 

    /*insert auth headers*/


var _responseError = function (rejection) 

    if (rejection.status === 401) 

        $location.path('/login');
    

    return $q.reject(rejection);


var _response = function (response) 
    return response || $q.when(response);

提前感谢您的帮助

【问题讨论】:

能否请您发布使用您上面发布的功能的代码。 【参考方案1】:

您似乎误解了 [Angular 拦截器] 的机制。

用于全局错误处理、身份验证或任何类型的 请求的同步或异步预处理或 响应的后处理,希望能够拦截 在将请求传递给服务器之前并响应之前的请求 它们被移交给启动这些的应用程序代码 请求。

拦截器的目的是在将响应交给应用程序代码之前对其进行预处理,这意味着它位于浏览器和您的个人代码之间。由于服务器响应 401 错误,浏览器肯定会将其视为 401 未授权,将其标记为红色并将日志写入console 面板。

然后 Angular 拦截器从浏览器接收 http 响应数据,并按照您告诉它的方式对其进行预处理。当所有这些都完成后,您的$http 调用将收到最终的响应对象。

所以是的,这是浏览器的一项功能。如果您认为错误消息很烦人并且您不希望用户看到它,您可以将您的响应代码重写给其他人(例如 0、600,与所有 HTTP 响应代码不冲突的任何内容)然后在您的拦截器中处理它们.这是一个诡计。

【讨论】:

非常感谢...完整回答

以上是关于AngularJS成功401拦截还是抛出401的主要内容,如果未能解决你的问题,请参考以下文章

多个请求的 axios 拦截器刷新令牌

Vue-axios拦截器401错误

Spring Security 401 - 使用 / Angularjs 调用 restful 服务

使用全局axios拦截器时如何防止出现多次401错误警告

MVC5 抛出 401 的 HttpException 返回 500

Angular 4 和 OAuth - 拦截 401 响应,刷新访问令牌并重试请求