在 AngularJS 中设置应用程序范围的 HTTP 标头

Posted

技术标签:

【中文标题】在 AngularJS 中设置应用程序范围的 HTTP 标头【英文标题】:Setting application wide HTTP headers in AngularJS 【发布时间】:2012-12-20 10:03:55 【问题描述】:

有没有办法在angular.module('myApp', []).config() 之外设置$httpProvider 标头?

我在登录用户后从服务器获取了一个 Auth-Token,我需要将它作为 HTTP 标头添加到所有后续请求中。

【问题讨论】:

【参考方案1】:

您可以为角度 1.0.x 使用默认标题:

$http.defaults.headers.common['Authentication'] = 'authentication';

或 Angular 1.1.x+ 的请求拦截器:

myapp.factory('httpRequestInterceptor', function () 
  return 
    request: function (config) 

      // use this to destroying other existing headers
      config.headers = 'Authentication':'authentication'

      // use this to prevent destroying other existing headers
      // config.headers['Authorization'] = 'authentication';

      return config;
    
  ;
);

myapp.config(function ($httpProvider) 
  $httpProvider.interceptors.push('httpRequestInterceptor');
);

由于工厂/服务是单例的,因此只要在服务实例化后不需要动态更改“身份验证”值即可。

【讨论】:

我喜欢这项服务。谢谢! 有点困惑。如何将其集成到我的应用程序中?我是否需要将其列为依赖项然后使用$httpProvider 而不是$http 将 $httpProvider 注入到你的应用模块挂起的配置方法中。 Providers 是一种在服务被 Angular 注入控制器之前配置服务的方式。 @AakilFernandes 这只是一个配置。可以直接注入$http。 这很奇怪。当我使用 $http.defaults.headers.common 时,我收到错误 405(不允许使用方法)。我不确定这里的问题是否是 webapp2。【参考方案2】:

添加到@Guria 和@Panga 的上述回复

config.headers['X-Access-Token'] = $window.sessionStorage.token;

可以在标头中使用 x-access-token 作为 JWT(jsonwebtoken)。 当用户第一次进行身份验证时,我将 JWT 存储在会话存储中。

【讨论】:

【参考方案3】:
$http.defaults.headers.common['Auth-Token'] = 'token';

似乎headers() 规范了键名。

【讨论】:

您能否详细说明规范化键名的含义? 使用 headers() 方法获取标头时,密钥“Auth-Token”变为小写并变为“auth-token”。这令人困惑。 @lucassp 可能是这个 - ***.com/questions/5258977/…

以上是关于在 AngularJS 中设置应用程序范围的 HTTP 标头的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AngularJS 指令范围中设置默认值?

在 AngularJs 中设置动态范围变量 - scope.<some_string>

在 AngularJS / Electron 应用程序中设置 $location

如何在 AngularJS 中设置嵌套视图?

Angularjs - 如何在服务中设置模块值?

XSRF 标头未在 AngularJS 中设置