如何注入服务来监控认证和存储状态?

How to inject services to monitor authentication and storage status?

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

我看到 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
      };
   });
});

但是我有一个注入问题,我无法找到 如何注入我的 TokenHandler 服务和我的 AuthHandler 服务 以便能够知道用户是否已经登录或不,如果他有 localstroage 或没有。

感谢您的帮助 ;)

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

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

   //...
});