ui-当需要认证时路由器不会重定向uired

ui-router will not redirect when authentication is required

如果用户尚未通过身份验证,则应该重定向到登录页面。 $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"),但这也没有任何作用。

我检查了 documentation 它说 go():

String Absolute State Name or Relative State Path

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

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