7

我正在使用 Keycloak.js 与 Keycloak 交互并低于错误

Uncaught Error: [$injector:unpr] Unknown provider: AuthProvider <- Auth <- authInterceptor <- $http <- $templateRequest <- $compile

使用以下代码:

module.factory('authInterceptor', ['$q', 'Auth', function($q, Auth) {
  return {
    request: function (config) {
      var deferred = $q.defer();
      if (Auth.authz.token) {
        Auth.authz.updateToken(5).success(function() {
          config.headers = config.headers || {};
          config.headers.Authorization = 'Bearer ' + Auth.authz.token;

          deferred.resolve(config);
        }).error(function() {
          deferred.reject('Failed to refresh token');
        });
      }
      return deferred.promise;
    }
  };
}]);

module.config(['$httpProvider', function($httpProvider) {
  $httpProvider.responseInterceptors.push('errorInterceptor');
  $httpProvider.interceptors.push('authInterceptor');
}]);

发生这种情况有原因吗?

我还在我的 index.html 中包含了 keycloak.js,它与 Bower 一起插入

我还准备好在 dom 内部实例化的以下 Auth 工厂:

angular.element(document).ready(function($http) {
  var keycloakAuth = new Keycloak('keycloak.json');
  auth.loggedIn = false;

  keycloakAuth.init().success(function () {
    auth.loggedIn = true;
    auth.authz = keycloakAuth;
    auth.logoutUrl = keycloakAuth.authServerUrl + "/realms/demo/tokens/logout?redirect_uri=http://localhost:3000";
    module.factory('Auth', function () {
      return auth;
    });
  }).error(function () {
    window.location.reload();
  });
});
4

2 回答 2

1

问题是您在 dom 就绪时实例化“Auth”,但依赖注入器试图在 dom 就绪之前注入(简化)。

问题是为什么在 dom 上准备好?

这里有两个例子:

http://jsbin.com/lulin/1/edit (与 dom 就绪定义,不工作,同样的错误)

http://jsbin.com/wajeho/2/edit (没有 dom 就绪定义,工作)


编辑:

你必须这样做:http: //jsbin.com/xusiva/1/edit ?html,js,console

我在domready之外定义工厂,在domready之后我在控制器内部使用它。

于 2015-01-29T12:07:46.347 回答
1

我有同样的问题,到目前为止,我可以说 Keycloak 的示例正在运行 angular 1.2,而您可能使用的是最新的 1.3。
如果您尝试使用 Angular 1.2 的 Keycloak 角度示例,它可以工作,但是当您使用 1.3 尝试它时,您会收到该错误。

我一直在阅读这个,它与拦截器有关,它们在 Angular 1.3 中声明的方式是不同的。此外,在 Angular 1.3 中完全不推荐使用 responseInterceptors。

于 2015-06-11T17:14:09.950 回答