angularjs 将localStorageService中的令牌与侦听器一起使用

wqsoz72f  于 2022-11-21  发布在  Angular
关注(0)|答案(2)|浏览(156)

我对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?感谢您提供的正确指导。

mkshixfv

mkshixfv1#

正如您找到的答案所说,在配置阶段不可能注入服务。
有两种可能的解决方案可以解决您的问题。

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');
});
wfveoks0

wfveoks02#

ngStorage的文档说明如下:
配置阶段的使用情况
要在Angular 配置阶段读取和设置值,请使用提供程序提供的.get/.set函数。

var app = angular.module('app', ['ngStorage'])
.config(['$localStorageProvider',
    function ($localStorageProvider) {
        $localStorageProvider.get('MyKey');

        $localStorageProvider.set('MyKey', { k: 'value' });
    }]);

相关问题