2

私のAngularアプリでは、アプリケーションの残りの部分を実行できるようにする前に、サーバーからいくつかのデータを読み取る必要があります. たとえば、何かへのアクセスを許可する前に、ユーザーの許可を確認できるように、ユーザーを認証する必要があります。アプリの起動時にこれを行う必要があり、どのコントローラーが最初に読み込まれるかわからないため、最初にヒットするコントローラーがわからないため、 $routeProvider.when メソッドの解決機能を使用できません。アプリの起動時に一度だけ発生します。

module.run メソッドで何かを実行する方向に舵を取り続けていますが、サーバーからデータが返されるまで続行しないようにする方法が見つかりません。私はこれを見つけましたが、同じ問題に悩まされています: AngularJS : Initialize service with asynchronous data

手動でブートストラップすることもできますが、これを行う方法の良い例が見つかりません。あなたが提供できる助けをいただければ幸いです。

4

2 に答える 2

1

すでに述べた他の回答と同様に、アプリのセキュリティに注意する必要があります。

考えられる解決策は次のとおりです。

ユーザーが認証されているかどうかを確認する

API に認証を実装します。ユーザーが responseInterceptor でログインしているかどうかを確認できます。

.config(['$routeProvider','$httpProvider', function($routeProvider,$httpProvider) {

  //setup your routes here...   

  var authChecker = ['$location', '$q', function($location, $q) {
      //redirects the user to /login page if he's not authorized (401)
      function success(response) {
          return response;
      }

      function error(response) {

          if(response.status === 401) {
              $location.path('/login');
              return $q.reject(response);
          }
          else {
              return $q.reject(response);
          }
      }

      return function(promise) {
          return promise.then(success, error);
      }
  }];

  $httpProvider.responseInterceptors.push(authChecker);
}])

詳細については、 $http ドキュメントを参照してください。

回避策: 実行スコープ

セキュリティの問題は解決しませんが、機能しています:

次のように実行ブロックでデータを取得します。

.run(function($http,$location,$rootScope) {
    $rootScope.$on("$routeChangeStart", function (event, next, current) {
        if($rootScope.gotData) {
             $location.path(next.path);
        } else {
            $location.path('/loading');
        }
    });

    $http.get('path/to/data').success(function() {
        $rootScope.gotData = true;
        $location.path('/home');
    }).error(function() {
        $location.path('/404');
    })
})

詳細については、ドキュメントを参照してください。

于 2013-07-30T15:43:50.747 に答える
1

ここで考えられる最も簡単な方法は、ログイン用に別のページを用意することです。ユーザーが認証されると、メイン アプリ (Angular アプリ) へのアクセスのみが許可されます。

また、不正なリクエストに対してサービス リソースを保護する必要があります。これにより、コントローラ \ ビューが不正なデータをロードするのを防ぐことができます。

于 2013-07-30T15:22:08.650 に答える