当需要身份验证时,ui路由器不会重定向

ui-router will not redirect when authentication is required

本文关键字:路由器 重定向 ui 身份验证      更新时间:2023-09-26

如果用户尚未通过身份验证,则应重定向到登录页面。$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():的文档

String Absolute State Name or Relative State Path

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

我遇到过状态go与警报结合使用的问题,我通过使用设置为100ms左右的$timeout解决了这个问题,例如:延迟您的状态.go,希望这能解决您的问题。