7

Keycloakとのやり取りにKeycloak.jsを使用していて、エラーが発生しています

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

これが起こっている理由はありますか?

Bowerで挿入されたindex.htmlにkeycloak.jsも含めています

また、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 Ready で「Auth」をインスタンス化していることですが、依存性インジェクターは、DOM Ready の前に注入しようとしています (簡略化)。

問題は、なぜ dom の準備ができているのかということです。

以下に 2 つの例を示します。

http://jsbin.com/lulin/1/edit (オン dom 対応の定義、動作しない、同じエラー)

http://jsbin.com/wajeho/2/edit (dom Ready 定義なしで動作)


編集:

次のようなことをしなければなりません: 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 angular exampleを試すと機能しますが、1.3で試すとそのエラーが発生します。

私はこれについて読んでいますが、それはインターセプターに関係しています.Angular 1.3で宣​​言される方法は異なります. また、responseInterceptor は angular 1.3 で完全に廃止されました。

于 2015-06-11T17:14:09.950 に答える