2016-05-31 5 views
0

Ich versuche eine Angular 1-App auf einem SAML-gesicherten Backend zu erstellen. Wenn ich eine REST-Anforderung ausstelle, obwohl sie nicht authentifiziert ist, erhalte ich eine Antwort mit dem Status 200 und eine HTML-Seite, die eine Seite an den IDP sendet.

Ich möchte nicht 200 Antwort auf meine $http(...).then(function(...){}) Methode in meinen Diensten erreichen. Also ich möchte den 200 zu einem 401 Status-Code in einem HTTP-Interceptor ändern.

Ist das möglich?

Alle Alternativen sind willkommen.

Antwort

1

Ok, ich habe es gefunden:

In der Antwort-Methode können Sie diese Anweisung verwenden, um den Status zu 401 einzustellen:

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

Voll Code-Beispiel:

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

I habe diesen Fehler '' 'Broken interceptor detected: Config-Objekt nicht in der Ablehnung geliefert' '' beim Aufruf von '' '$ q.reject (..)' ''. –

Verwandte Themen