当需要身份验证时,ui-router不会重定向

时间:2015-04-06 18:21:54

标签: javascript angularjs angular-ui-router angularjs-service angularjs-routing

如果用户尚未进行身份验证,则应该重定向到登录页面。 $state.go("login");应该做到这一点,但它没有做任何事情。

// in app.js

$stateProvider
.state('login', {
    template: 'login.html'
    url: '/login',
    controller: 'AuthenticationCtrl',
})
.state('special', {
    resolve: { loginRequired: checkAuthenticated },
    template: 'special.html',
    url: '/special', 
    controller: 'SpecialCtrl',
})

var checkAuthenticated = function($state, AuthenticationService, $q, $timeout) {
    var deferred = $q.defer();

    if(AuthenticationService.isAuthenticated()) {
        deferred.resolve();
    } else {
        deferred.reject();
        alert('You are being redirected to login page');
        $state.go("login");    // redirect to login page -- but this does nothing.
    }
}

此处,如果用户未经过身份验证并尝试访问需要身份验证的路由,则会看到我的警报弹出。但事后没有任何事情发生; ui-router没有重定向到我的登录页面。

我也尝试了$location.path('/login')而不是$state.go("login"),但这也没有做任何事情。

我查看了go()所说的documentation

String Absolute State Name or Relative State Path

我有,所以我必须遗漏导致这个问题的东西,但我不确定是什么。

1 个答案:

答案 0 :(得分:0)

' ave遇到状态问题与警报一起使用,我通过使用$timeout设置为100毫秒左右解决了这个问题,例如:延迟你的state.go并希望这将解决你的问题问题。

相关问题