2016-05-31 96 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(..)'''時發現破壞的攔截器:配置對象在拒絕中沒有提供''。 –