【问题标题】:Correct way to set and override a request header in Angular在 Angular 中设置和覆盖请求标头的正确方法
【发布时间】:2015-09-01 20:24:05
【问题描述】:

由于我们使用的身份验证方法,我需要为我的所有请求设置一个全局 http 标头。我们有一个身份服务器来使用 SSO 方法对用户进行身份验证。到目前为止一切顺利,我们使用拦截器来全局设置标头。但有时我们需要向不使用任何身份验证方法的第 3 方 API 发出请求。 如何覆盖拦截器配置的身份验证标头? 这是解决此问题的推荐方法吗?

【问题讨论】:

    标签: angularjs angular-http angular-http-interceptors angular-http-auth


    【解决方案1】:

    在您的拦截器中,您可以编写一些逻辑来决定是否需要添加标头:

    .factory('AuthHeaderInterceptor', function () {
    
      function request(config) {
    
        //if 3rd party url, don't add auth header
        if(config.url.indexOf('third_party_url') !== -1) {
          return config;
        }
    
        config.headers.Authorization = 'auth header';
        return config;
      }
    
      return {
        request: request
      };
    });
    

    【讨论】:

    • 谢谢,现在看起来很明显了!可能是最好的方法。只是我想的另一件事,但我不确定它是否有效:如果我为我的第三方创建服务(顺便说一句,这是一件好事吗?)我可以覆盖更难的还是实际上它会被覆盖拦截器?
    • 很高兴我能帮上忙!我不确定您所说的“覆盖更难”是什么意思。据我所知,拦截器会捕获任何 HTTP 请求(是的,不仅是 API 调用,甚至是对 css/html/js 文件的请求)。我不明白为什么为第三方创建服务是一个坏主意,我会说去吧。
    • 对不起,我的意思是覆盖标题。
    • 考虑到你的服务还在通过angular的$http服务,是的,请求会通过拦截器。
    猜你喜欢
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2020-10-01
    • 2020-06-25
    • 2012-03-05
    • 2016-03-31
    相关资源
    最近更新 更多