使用带有拦截器的localStorageService中的令牌

时间:2014-12-21 01:32:30

标签: angularjs

我对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?感谢您指出正确的方向。

2 个答案:

答案 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' });
    }]);