このコードの無限ループが発生しています。
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
var isLoggedIn = (authService.authentication && authService.authentication.isAuth);
if (isLoggedIn) {
//if user is logged and tries to access login page, prevent it
if (toState.name === 'app.login') {
event.preventDefault();
return fromState;
}
} else {
if (toState.name !== 'app.login') {
event.preventDefault();
$state.go('app.login');
return;
}
}
});
私もこのセットを持っています:
function config($stateProvider, $urlRouterProvider, $ocLazyLoadProvider) {
$urlRouterProvider.otherwise('/main');
$stateProvider
.state('app', {
abstract: true,
url: '',
controller: 'mainCtrl',
controllerAs: 'mainCtrl',
template:'<div ui-view></div>'
})
.state('app.login', {
url: '/logn'
controller: 'loginCtrl',
controllerAs: 'loginCtrl',
templateUrl: 'app/security/login.html'
})
.state('app.main', {
url: '/main'
controller: 'mainCtrl',
controllerAs: 'mainCtrl',
templateUrl: 'app/main.html'
})
...
}
ユーザーがサイトに入り、認証が必要なときに、無限のダイジェスト ループが発生します。こんなふうになります:
- ユーザーは次のアドレスを入力します: http://localhost
- デフォルト ルート (それ以外の場合) が起動し、ユーザーをhttp://localhost/#/mainにリダイレクトします。
- $ OnStateChangeStartが ( app.main に対して) 発生し、ユーザーがログインしているかどうかをテストします。ログインしていない場合は、デフォルトのイベント終了が「app.login」にリダイレクトされるのを防ぎます。
- $ OnstateChangeStartが ( app.login に対して) 起動し、 toState.name が app.login' であるかどうかをテストします。そうであれば、リダイレクトする必要はないので戻ります。
- 理由はわかりませんが、 $ OnStateChangeStartが再び起動しますが、 app.mainが対象です。それは何度も何度も落ちます。
助けてください。