【问题标题】:prevent all $http request if a token is undefined如果令牌未定义,则阻止所有 $http 请求
【发布时间】:2017-01-13 00:39:16
【问题描述】:

如果令牌未解析,我如何阻止所有 $http 请求。 令牌在登录时存储在 localStorage 中

我正在寻找类似的东西

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

【问题讨论】:

  • 创建一个 $http 包装器/代理,并将您的支票添加到您对 post、get 等的覆盖中。

标签: angularjs angular-http-interceptors


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2022-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-28
        • 1970-01-01
        • 2014-02-09
        • 1970-01-01
        相关资源
        最近更新 更多