我可以在$ http拦截器中更改HTTP响应状态吗?

时间:2016-05-31 15:41:27

标签: angularjs http interceptor

我试图在SAML安全后端上创建一个Angular 1应用。 当我在未经过身份验证的情况下发出REST请求时,我会收到状态为200的响应和一个将向IDP提交页面的HTML页面。

我不希望这200个响应在我的服务中达到我的$http(...).then(function(...){})方法。 所以我想在HTTP拦截器中将200更改为401状态代码。

这可能吗?

欢迎任何替代方案。

1 个答案:

答案 0 :(得分:1)

好的,我找到了:

在响应方法中,您可以使用此语句将状态设置为401:

return $q.reject({status: 401, error: 'UNAUTHORIZED'});

完整代码示例:

interceptor = function ($q, $location, $rootScope) {
        return {
            request: function (config) {
                ...
                return config || $q.when(config);
            },

            requestError: function (rejection) {
                return $q.reject(rejection);
            },

            response: function (response) {

                if (response.status === 200 &&
                    response.headers()['content-type']==='text/html' &&
                    response.data.startsWith("<HTML><HEAD><TITLE>SAML HTTP Post Binding</TITLE>")) {
                    //WE HAVE A SAML AUTH REQUEST
                    return $q.reject({status: 401, error: 'UNAUTHORIZED'});
                }

                return response;
            },

            responseError: function (rejection) {
                ...
            }

        };
    };
    $httpProvider.interceptors.push(interceptor);