我对Angular很新,所以我完全可能犯了一些愚蠢的错误。
我要做的是使用保存在localStorage中的令牌并将其放在所有请求中。
我有这个代码块:
.config(['$httpProvider', 'localStorageService', function($httpProvider, localStorageService) {
//Http Interceptor to check auth failures for xhr requests
$httpProvider.interceptors.push('authHttpResponseInterceptor');
$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.headers.common.Authorization = 'Token token=' + localStorageService.get("TemponiaToken")
}])
我收到此错误消息:
Uncaught Error: [$injector:modulerr] Failed to instantiate module starter due to:
Error: [$injector:unpr] Unknown provider: localStorageService
我发现这个问题和答案(我认为)解释了这个问题:Why can't I use the localStorage in my .config when it's include in the .module definition?
但是:我该如何解决这个问题?将.config更改为.run?感谢您指出正确的方向。
答案 0 :(得分:1)
正如您所发现的答案所说,在配置阶段无法注入服务。
您的问题有两种可能的解决方案。
第一个是使用本机localStorage
对象
localStorage.getItem("TemponiaToken") // it just works without injecting any service
另一个是正确定义interceptor
yourApp.factory('AuthInterceptor', function (localStorageService) {
return {
request: function (config) {
config.headers = config.headers || {};
config.headers.Authorization = 'Token token=' + localStorageService.get("TemponiaToken")
return config;
}
};
});
yourApp.config(function ($httpProvider) {
$httpProvider.interceptors.push('AuthInterceptor');
});
答案 1 :(得分:0)
ngStorage的文件说:
配置阶段的用法
要在Angular配置阶段读取和设置值,请使用提供程序提供的.get / .set函数。
var app = angular.module('app', ['ngStorage'])
.config(['$localStorageProvider',
function ($localStorageProvider) {
$localStorageProvider.get('MyKey');
$localStorageProvider.set('MyKey', { k: 'value' });
}]);