如果未定义令牌,则阻止所有$ http请求

时间:2017-01-12 16:12:46

标签: angularjs angular-http-interceptors

如果未解析令牌,我怎么能以角度阻止所有$ http请求。 令牌存储在localStorage

的登录名中

我正在寻找像

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

3 个答案:

答案 0 :(得分:0)

如果未设置令牌,您可以拦截每个请求并取消它们

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                         
                }
            }
        }
    });
})

答案 1 :(得分: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
                    }
                }
            }

        })
    })

答案 2 :(得分: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');
});