Angularjs承诺捕获401



我正在为用户登录的非常基本的angularjs代码:

[...]
this.login = function(email, password) {
    promise = $http.post('/login',
            {
                'email': email,
                'password': password
            });
    promise.then(function(response){
            console.log("success");
        }).catch(function(response){
            console.log("catch");
        }).finally(function(response){
            console.log("finally");
        });
    return promise;
};
[...]

当REST API与代码200生成响应时,客户端控制台将记录success finally并登录用户。
当服务器使用403或500代码生成响应时,控制台将打印出catch finally

但是,当响应与401的响应时,Angular不会打印出任何内容。控制台只有POST http://127.0.0.1/login 401 (Unauthorized)提示才能保持空。但是没有successcatch作为输出。也没有finally

在我的项目中,将使用$rootScope.$on('event:auth-forbidden', function(r) {...});在全球范围内捕获403。这就是为什么REST服务器仅在找不到某些内容时才投掷404,403当用户未经许可和/或未登录时,只有在登录失败时才登录401。

那么我如何在$http上捕获401?
.then是否仅承诺返回200和每次返回的.catch!= 200?

我正在使用AngularJS V1.6.4与Angular-Http-Auth v1.5.0。

问题是angular-http-auth模块拦截了与状态401或403的响应:

$http Interceptor执行以下操作:每个HTTP 401响应的配置对象(这是请求的URL,有效负载和参数)都会缓冲,并且每次发生时,事件:auth-loginrequired消息都会从$rootScope广播。/blockquote>

禁用401拦截器集ignoreAuthModule: true

有时您可能不希望拦截器拦截请求,即使有人返回401或403。在这种情况下,您可以将ignoreAuthModule: true添加到请求配置。

该模块在待定状态下以401状态创造了一个新的承诺。响应被缓冲,您有机会致电authService.loginConfirmed()authService.loginCancelled()功能。第一个检索由于HTTP 401响应而导致的所有请求。当第二个取消所有待处理请求以前由于http 401响应而失败和缓冲。

docs

最新更新