2017-01-12 31 views
2

如果令牌未解析,如何以角度阻止所有$ http请求。 令牌存储在登录在localStorage的

我正在寻找类似

app.config("$httpInterceptor", function(){ 
    var token = localStorage.getItem("token") 
    if (token == null){ 
//prevent all $http calls (get, post, put whatever calls) 
} 
}) 
+0

创建一个$ http包装/代理并添加您的支票在您的覆盖发布,获取等。 – Igor

回答

0

你可以拦截所有的请求,并cancell他们如果令牌未设置

angular.module('myModule', []) 
.config(function($httpProvider) { 
    $httpProvider.interceptors.push(function($q) { 
     var canceler = $q.defer(); 
     return { 
      'request': function(config) { 
       if(!window.localStorage.getItem('token')) { 
       config.timeout = canceler.promise; //cancelled       
       } 
      } 
     } 
    }); 
}) 
0

你可以拒绝请求甚至在开始之前

angular 
    .module('app', []) 
    .config(function ($httpProvider) { 
     $httpProvider.interceptors.push(function($q) { 
      return { 
       'request': function(config) { 
        if(!localStorage.getItem('token')) { 
         return $q.reject() 
        } else { 
         return config 
        } 
       } 
      } 

     }) 
    }) 
0

您需要使用应用拦截器的概念。

app.factory('httpCanceller', ['$q', function($q) { 
    return { 
    'request': function(config) { 

     var canceler = $q.defer(); 
     var token = localStorage.getItem("token"); 

     config.timeout = canceler.promise; 

     if (!token) { 
      canceler.resolve(); 
     } 

     return config; 
    } 
    } 
}]); 


app.config('$httpProvider', function($httpProvider){ 
    httpProvider.interceptors.push('httpCanceller'); 
});