2017-07-14 4 views
0

私はuserAccessフラグを返します。falseを返す場合は、ユーザーからすべてのアプリケーションを隠し、ユーザーをaccess.htmlにリダイレクトしたい場合は、次のコードでエラーtransition supersededをスローします。AngularJsを使用してフラグに基づいて州にリダイレクトする方法は?

$scope.cookie = $cookies.get(jklHr'); 
var parts = $scope.cookie.split("|"); 
var uidParts = parts[7].split(","); 
$scope.newUser._id = uidParts[0]; 
var userAccess = AuthService.getCurrentUser($scope.newUser._id); 

    if(!userAccess) { 
     console.log("Access Deinied"); 
     $state.go('app.access'); 
    } 

app.js

angular.module('App', [ 
    'ui.router', 
    'ui.bootstrap', 
    'ui.bootstrap.pagination', 
    'ngSanitize', 
    'timer', 
    'toastr', 
    'ngCookies', 
]).config(function($stateProvider, $httpProvider, $urlRouterProvider) { 
    'use strict' 

    $urlRouterProvider.otherwise(function($injector) { 
     var $state = $injector.get('$state'); 
     $state.go('app.home'); 
    }); 

    $stateProvider 
     .state('app', { 
      abstract: true, 
      url: '', 
      templateUrl: 'web/global/main.html', 
      controller: 'MainCtrl' 
     }) 
     .state('app.home', { 
      url: '/', 
      templateUrl: 'view/home.html', 
      controller: 'MainCtrl' 
     }) 
     .state('app.dit', { 
      url: '/dit', 
      templateUrl: 'view/partials/logs.html', 
      controller: 'LogsCtrl', 
      resolve: { 
       changeStateData: function(LogsFactory) { 
        var env = 'dit'; 
        return LogsFactory.resolveData(env) 
         .then(function(response) { 
          return response.data 
         }); 
       } 
      } 
     }) 
     .state('app.access', { 
      url: '/access', 
      templateUrl: 'view/partials/access.html', 
      controller: 'AccessCtrl' 
     }); 
}); 

答えて

0

はインターセプタを作成

mainCtrl.jsは、すべてのHTTPクラスは、インターセプタをスロー行きます。 "解決"の部分が実行されて401に戻ると、ログイン画面にリダイレクトするか、または禁止されたビューに403をリダイレクトすることができます。

https://docs.angularjs.org/api/ng/service/ $ HTTP

0

問題は、以前の状態変化がコースにまだある間、状態を変更しようとしているということです。 ui-routerには、状態の変更の開始と終了のイベントがあります。

$rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState, fromParams) { 

}); 

リダイレクトがそこにあるはずです。とにかく、そのユーザーのチェックをログイン状態の例外を除いて、.run()のような、あなたのアプリケーションの上位レベルに移動することをお勧めします。そうすれば、すべてのコントローラを個別にチェックインする必要はありません。

0

最新のバージョンのangularjs & angular-uiを使用していることを確認してください。古いバージョンを使用している場合は、angle-uiバージョンと角度バージョンの互換性を確認してください。 https://github.com/angular-ui/ui-router/issues/3246 問題が解決しない場合は、app.configを

$qProvider.errorOnUnhandledRejections(false) 

内の次の行を追加しますがコンフィグ機能に依存$qProviderを追加することを忘れないでください。

関連する問題