【问题标题】:AngularJS Successful 401 Intercept Still Throws 401AngularJS成功401拦截还是抛出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);
}

提前感谢您的帮助

【问题讨论】:

  • 能否请您发布使用您上面发布的功能的代码。

标签: javascript angularjs restful-authentication http-status-code-401


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 非常感谢...完整回答
猜你喜欢
  • 2014-11-02
  • 2022-01-25
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多