2016-11-28 3 views
0

Ich habe einen Auth-Abfangjäger geschrieben, die Auth-Token auf die Anforderung ergänzt und behandelt Fehler Auth, wenn der Benutzer nicht angemeldet ist.Winkel Auth Abfangjäger auf ausgewählte Anfrage

var storeApp = angular.module('storeApp'); 

storeApp.factory('authInterceptor', function ($q, $window) { 
    return { 
     request: function (config) { 
      config.headers = config.headers || {}; 
      if ($window.sessionStorage.token) { 
       config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token; 
      } 
      return config; 
     }, 
     response: function (response) { 
      return response || $q.when(response); 
     }, 
     responseError: function (response) { 
      if (response.status === 401 || response.data.error === 'token_not_provided') { 
       console.log('auth error'); 
      } 
      return $q.reject(response); 
     } 
    }; 
}); 

storeApp.config(function ($httpProvider) { 
    $httpProvider.defaults.withCredentials = true; 
    $httpProvider.interceptors.push('authInterceptor'); 
}); 

Das Problem ist, der Auth Abfangjäger hinzugefügt werden Jede Anfrage, unabhängig von der Anfrage, erfordert eine Authentifizierung oder nicht. Was ist der beste Weg, um einen Authentifizierungsinterceptor zu erstellen, der nur dann abfängt, wenn die Route eine Authentifizierung erfordert?

Antwort

0

Sie müssen die Filter aus, die Anforderungen, die Sie in den authInterceptor Factory-Methoden wollen

['/whatever/1', '/whatever/2', '/whatever/3'].forEach(function(value){ 
if (response.config.url.startsWith(value)) { 
    // do something 
} 
}) 


return response;