如何跳过HTTP请求的AngularJS拦截器?

2024-02-19

我有一个 angularjs 应用程序,其中有一个拦截器,它将授权令牌添加到每个请求的标头中。

然而,在应用程序的某个地方,我需要使用外部 API,拦截器会破坏它,因为它添加了这个外部 API 提供者不接受的授权标头。如何让 angularjs HTTP 跳过拦截器,仅在这一特定情况下?

拦截器代码如下:

app.factory('authInterceptorService', ['$q', '$injector', '$location', 'localStorageService', function ($q, $injector, $location, localStorageService) {
    var authInterceptorServiceFactory = {};
    var $http;

    var _request = function (config) {

        config.headers = config.headers || {};

        var authData = localStorageService.get('authorizationData');
        if (authData) {
            //console.log("token: " + authData.token.substring(0, 10));
            //console.log("user: " + authData.userName);
            config.headers.Authorization = 'Bearer ' + authData.token;
        }
        return config;
    }

    var _responseError = function (rejection) {
        var deferred = $q.defer();
        if (rejection.status === 401) {
            var authService = $injector.get('authService');
            authService.refreshToken().then(function (response) {
                _retryHttpRequest(rejection.config, deferred);
            }, function () {
                authService.logOut();
                $location.path('/login');
                deferred.reject(rejection);
            });
        } else {
            deferred.reject(rejection);
        }
        return deferred.promise;
    }

    var _retryHttpRequest = function (config, deferred) {
        console.log('retrying');
        $http = $http || $injector.get('$http');
        $http(config).then(function (response) {
            deferred.resolve(response);
            //console.log("success:" +response);
        }, function (response) {
            deferred.reject(response);
            //console.log("error:" + response);
        });
    }

    authInterceptorServiceFactory.request = _request;
    authInterceptorServiceFactory.responseError = _responseError;

    return authInterceptorServiceFactory;
}]);

Easy

$http.get("url" , {noAuth : true}).then(success(),error());

在拦截器中

  var _request = function (config) {

    config.headers = config.headers || {};

    var authData = localStorageService.get('authorizationData');
    if (authData && !config.noAuth) {
        //console.log("token: " + authData.token.substring(0, 10));
        //console.log("user: " + authData.userName);
        config.headers.Authorization = 'Bearer ' + authData.token;
    }
    return config;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何跳过HTTP请求的AngularJS拦截器? 的相关文章

随机推荐

  • d3:在transition.tween() 中使用*name* 参数

    根据文档transition tween https github com mbostock d3 wiki Transitions tween calling transition tween name factory 为指定的对象注册一
  • 如何检查两个日期时间是否在彼此的特定范围内?

    我有两个 datetime64 对象 a 和 b 我想确定它们是否在彼此的特定范围内 然而 范围并不对称 如果a在b的 30到120分钟之间 a比b早半小时到晚2小时之间 则两者在期望的范围内 我的日期时间对象看起来像 m d Y H M
  • Swift 惰性和可选属性

    和有什么区别Lazy or Optional斯威夫特的财产 例如 如果有人正在构建一个从侧面进入的导航栏 我认为这一切都应该在一个内UIViewController 用户可能永远不会打开菜单 但有时他们会 var menu Navigati
  • 在 C++11 中实现递归代理模式

    假设我们有一些Foo允许的对象 cout lt lt myFoo 3 myFoo 5 bar 这需要代理设计模式 斯科特 迈耶斯 Scott Meyers 详细介绍如下 https stackoverflow com questions 2
  • 将 MongoDB 集合移动到另一个集合的更好方法

    在我的网络抓取项目中 我需要将前一天抓取的数据从mongo collection to mongo his collection 我正在使用此查询来移动数据 for record in collection find his collect
  • 我可以在 .gitignore 文件中包含其他 .gitignore 文件吗? (就像类 C 语言中的 #include 一样)

    我有一些文件 例如vim gitignore SVN gitignore and CVS gitignore 散布在我的硬盘上 我可以简单地将这些 gitignore 文件包含在 gitignore文件在新的 Git 项目中吗 Edit 我
  • 空指针的取消引用

    该错误消息到底意味着什么以及如何修复它 空指针的取消引用 这意味着 self 可以通过 initWithStyle reuseIdentifier 的返回值设为 nil 并且后续对默认值的访问将尝试在 nil 地址处读取 因此取消引用 这肯
  • 如何避免包含类实现文件?

    而不是做 include MyClass cpp 我想要做 include MyClass h 我在网上读到过not这样做被认为是不好的做法 简而言之单独编译 首先 让我们举一些简单的例子 struct ClassDeclaration c
  • Flink时间特性和AutoWatermarkInterval

    在 Apache Flink 中 setAutoWatermarkInterval interval 向下游操作员生成水印 以便他们提前事件时间 如果水印在指定的时间间隔内没有更改 没有事件到达 运行时将不会发出任何水印 另一方面 如果在下
  • 如何将列表附加到 pandas 列、系列?

    假设我有以下数据框 d col1 1 2 col2 3 4 df pd DataFrame data d 我想延长col1带数组xtra 然而这会出错 xtra 3 4 df col1 append xtra 我怎样才能追加xtra to
  • 如何从 Swift 中的 valueChanged 事件获取触摸坐标

    背景 I ve 以前学过的 https stackoverflow com a 34764356 3681880如何使用手势识别器或continueTrackingWithTouch获取当前触摸位置的持续更新 然后使用它们执行如下操作 然而
  • 如何获取CodeAttribute中的属性值

    我写了一个方法来按属性获取属性值 public string GetAttributeValueByNameAttributeAndProperty CodeClass cc string nameAttribute string name
  • 如何在 Jenkins 的 url 中传递 credentialID

    我正在使用这个命令 sh git push https userid passwd innersource com scm raghu demo git 但我想使用 credentialsId f0079d43 9522 4133 9601
  • 在 Ruby 中冻结变量不起作用 [重复]

    这个问题在这里已经有答案了 我正在学习 Ruby 并且在使用时发现了有趣的行为Object freeze带变量的方法 在我冻结一个变量之后 或者Fixnum or Array 我还是可以修改的 这很奇怪 因为就我而言 这不应该发生 而且Ty
  • Pandas 通过正则表达式读取带有字符串分隔符的 CSV

    我正在尝试将格式奇怪的文本文件导入到 pandas DataFrame 中 下面是两个示例行 LOADED LANE 1 MAT TYPE 2 LEFFECT 1 SPAN 200 SPACE 10 BETA 3 474 LOADEFFEC
  • Javascript:用另一个函数重新分配一个函数

    假设我有这两个功能 function fnChanger fn fn function sys print Changed function foo sys print Unchanged 现在 如果我打电话foo I see Unchan
  • PHP“未选择数据库”

    我最近开始用 PHP 创建一个网站 我的大部分代码都可以工作 但是我发现了一个无法纠正的问题 我有一个页面 其中有很多对数据库的调用 在我的页面顶部 我正在连接并使用 SELECT 来获取有关相关产品的一些信息 在页面底部 我再次连接以获取
  • 如何使用 Zend Framework 2 中的插件渲染自定义视图

    我正在开发一个应用程序 需要在流程完成后发送电子邮件 由于电子邮件需要是 HTML 我有一个好主意 将视图渲染为电子邮件消息正文 以便我可以实现 单击此处在浏览器上查看此内容 功能 这一切都在实现 AbstractRestfulContro
  • 如何用 Maven 属性替换 web.xml 中的值?

    我有一个 Maven 项目 它将一些测试文件下载到其构建目录中 target files 然后 这些文件应该可供 servlet 使用 我可以通过将完整路径硬编码为
  • 如何跳过HTTP请求的AngularJS拦截器?

    我有一个 angularjs 应用程序 其中有一个拦截器 它将授权令牌添加到每个请求的标头中 然而 在应用程序的某个地方 我需要使用外部 API 拦截器会破坏它 因为它添加了这个外部 API 提供者不接受的授权标头 如何让 angularj