如何在同一个Angular JS App中使用不同的API和不同的authentication头

你好,我只是一个AngularJs初学者,想要一些build议/帮助你们!

我正在创build一个应用程序,您可以通过Cisco CMX服务器login并检查您在build筑物中的当前位置。 它是一个服务器,通过您连接的几个访问点的信息来计算您的位置

我需要与MongoDB进行通信来validation用户,并使用令牌。

而当我login时,我想用另一个身份validation头转到CMX的API。

但我不知道它是如何工作的。

我在我的app.js运行中设置我的默认标题

$http.defaults.headers.common['Authorization'] = 'Bearer ' + $window.jwtToken; 

而当我想要去的CMX API我更改我的默认标题

 $http.defaults.headers.common['Authorization'] = 'Basic AAAAAAAAAAAAAAAAAAAAA=='; 

但它不会做伎俩..

通过networking服务器而不是客户端与CMX进行通信不是更好吗?

谢谢

在你的情况下,你想拦截每个HTTP请求,并注入包含自定义令牌的授权标头。

要做到这一点,你需要使用angularjs 拦截器


拦截器是通过将$ httpProvider添加到$ httpProvider.interceptors数组来注册的服务工厂。 工厂被调用并注入依赖(如果指定)并返回拦截器


这里是一个拦截器的例子,如果它在浏览器的本地存储中可用,它将注入一个令牌。

  $httpProvider.interceptors.push(['$q', '$location', '$localStorage', function ($q, $location, $localStorage) { return { 'request': function (config) { config.headers = config.headers || {}; if ($localStorage.token) { config.headers.Authorization = 'Bearer ' + $localStorage.token; } return config; }, 'responseError': function (response) { if (response.status === 401 || response.status === 403) { $location.path('/signin'); } return $q.reject(response); } }; }]); 

代码灵感来自