2016-05-31 45 views
0

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

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

这可能吗?

欢迎任何替代方案。

回答

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); 
+0

我得到这个错误'''调用'''$ q.reject(..)'''时发现破坏的拦截器:配置对象在拒绝中没有提供''。 –