AngularJS成功401拦截仍然投掷401

时间:2015-02-06 21:57:48

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

我有一个有效的角度拦截器服务,可以通过服务调用从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 个答案:

答案 0 :(得分:1)

似乎你误解了[Angular interceptor]的机制。

  

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

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

然后,Angular Interceptor从浏览器接收http响应数据,并按照您的要求对其进行预处理。完成所有这些操作后,您的$http调用将收到最终响应对象。

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

相关问题