2016-04-14 13 views
0

リクエストの前に$ httpリクエストを行うたびに、一般的なCircular依存関係の問題が発生します。上記のこれらの質問は、私がしようとしている同じものを取得しようとしている場合、私は本当に知らない

:前に私はこれらの質問を見てきました達成する。 JWTトークンの整合性をチェックするために$ httpリクエストを作成したいのですが、私はこれをサーバー側で行う必要があります。トークンの有効期限が切れている場合は、ユーザーに別のトークンを取得する必要があります。

ここに私のコードは

var app = angular.module('app', ['ngRoute', 'ngStorage']); 

app.factory('requestInterceptor', ['$q', '$localStorage', '$location', function($q, $localStorage, $location) 
{ 
    var requestInterceptor = {}; 

    requestInterceptor.request = function(config) 
    { 
//  $http 
//  ({ 
//   url : 'api/token', 
//   method: 'GET', 
//   headers : { Authorization : $localStorage.token} 
//  }).then(function(response){ 
//   $localStorage.token = response.data.token; 
//  },function(response){ 
//   $localStorage.token = null; 
//   $location.path('/'); 
//  });   

     config.headers = config.headers || {}; 
     if ($localStorage.token) 
     { 
      config.headers.Authorization = 'Bearer ' + $localStorage.token; 
     } 
     return config;   
    }; 

    requestInterceptor.responseError = function (response) 
    { 
     if (response.status === 401 || response.status === 403) 
     { 
      $location.path('/signin'); 
     } 
     return $q.reject(response); 
    }; 

    return requestInterceptor; 
}]); 

NOTE

Angular-JWT

答えて

0

異なるサービスに抽象トークン検証してみてくださいを使用することはできませんです。私はそれをテストしなかった^しかし、それは動作するはずです。

app.factory('auth', ['$http', '$localStorage', '$location', function($http, $localStorage, $location){ 
    return { 
    validateToken: function() { 
     return $http({ 
     url : 'api/token', 
     method: 'GET', 
     headers : { Authorization : $localStorage.token} 
     }).then(function(response){ 
     $localStorage.token = response.data.token; 
     return response.data.token; 
     },function(response){ 
     $localStorage.token = null; 
     $location.path('/'); 
     });  
    } 
    } 
}]); 

app.factory('requestInterceptor', ['auth', function(auth){ 
    var requestInterceptor = {}; 

    requestInterceptor.request = function(config){ 
    if (!config.url.startsWith('api/token')) { 
     auth.validateToken().then(function(token){ 
     config.headers = config.headers || {}; 
     config.headers.Authorization = 'Bearer ' + token; 
     return config; 
     }); 
    } else { 
     return config; 
    } 
    }; 

    return requestInterceptor; 
}]); 
+0

$ httpが定義されていません。 $ httpサービスを含めると循環依存性の問題が発生します – ggderas

関連する問題