javascript - 如何注入(inject)服务来监控身份验证和存储状态?

标签 javascript angularjs restangular

我正在使用 Angular.js 通过 Restangular 构建客户端应用程序。 问题是,我使用 wsse header 实现了摘要身份验证,我必须在每次向 REST 服务器发出请求时生成该 header 。

我看到 Restangular 提供了一个函数:addFullRequestInterceptor()。

所以现在,我尝试在 RestangularProvider 中使用它,并在此文件 Restangular.js 中对其进行配置:

// Config Restangular
app.config(function(RestangularProvider) {
  RestangularProvider.setBaseUrl(applicationConfig.SERVER_URL);
  RestangularProvider.setDefaultHeaders({'Content-Type': 'application/json'});
  RestangularProvider.addFullRequestInterceptor(
    function (element, operation, route, url, headers, params, httpConfig) {

      // Here is my header generation.
      $http.defaults.headers.common['X-WSSE'] =
        TokenHandler.getCredentials(
             AuthHandler.authentication.user.username,
             AuthHandler.authentication.secret); 

      return {
        element: element,
        headers: headers,
        params: params,
        httpConfig: httpConfig
      };
   });
});

但是我遇到了注入(inject)问题,我无法找出如何注入(inject)我的 TokenHandler 服务和我的 AuthHandler 服务以便能够知道用户是否已经登录以及他是否已经登录是否本地存储。

感谢您的帮助;)

最佳答案

问题在于,在 .config 阶段,诸如 AuthHandlerTokenHandler 等服务尚未实例化,因此您需要实例化它们(及其依赖项)手动使用 $injector (可注入(inject)到 config block 中):

app.config(function(RestangularProvider, 
                     $injector, 
                     AuthHandlerProvider,
                     TokenHandlerProvider) {
   var AuthHandler = $injector.instantiate(AuthHandlerProvider.$get);
   var TokenHandler = $injector.instantiate(TokenHandlerProvider.$get);

   //...
});

关于javascript - 如何注入(inject)服务来监控身份验证和存储状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30083511/

相关文章:

javascript - 分配一个对象来选择值 - ng-options

javascript - 矩形微调器

Angularjs - 工厂/服务内的 Restangular 调用

javascript - 加了Tampermonkey的onclick是不是调用了函数?

javascript - ng-class 和动画的竞争条件

javascript - 为什么 Microsoft Skydrive 不下载多个文件,即使 MS 示例显示了它? (wl.下载)

AngularJS - 等待多个资源查询完成

javascript - Restangular POST 失败 https ://OPTIONS pass

javascript - jquery:将动画绑定(bind)到滚动条位置的更好方法

javascript - Vue.js 不支持 HTML 文件中的外部 JSON