既にログインしているかどうかを確認するインターセプターを AngularJS で作成しようとしています。これは、$rootScope.user
変数を調べることによって行われます。
$rootScope.user
変数が存在しない場合は、Ajax 呼び出しを行って、サーバー上にまだセッションが存在するかどうかを確認します。
問題は、インターセプターがすべての Ajax リクエストをインターセプトしているため、無限ループになってしまうことです...
私は基本的にこれを持っています:
.factory('resourceInterceptor', ['$rootScope', 'AccountService', function($rootScope, accountService) {
return {
request: function(request) {
if(!$rootScope.user) {
var userData = accountService.getUserSession(); // creates loop
//var userData = $http.get('api/Account'); // Same thing
}
return request;
}
}
}]);
しかし、これは機能しません。次のエラーが発生します。
Error: [$injector:cdep] Circular dependency found: $http <- $resource <- AccountService <- resourceInterceptor <- $http <- $compile
または $http と同じ:
Error: [$injector:cdep] Circular dependency found: $http <- resourceInterceptor <- $http <- $compile
では、どうすればこの問題を解決できますか? データベースからユーザー情報を取得できるように、インターセプターから Ajax リクエストを実行したいと考えています。
注意: ヘッダーでトークンを使用するなど、ある種の認証方法を実装するには、さまざまな、おそらくより良い方法があることを私は知っています。私はそれを認識しており、別のより優れた認証方法についての回答を探しているわけではありません。この特定の問題についての回答が欲しいです。