【问题标题】:ui-router will not redirect when authentication is required需要身份验证时,ui-router 不会重定向
【发布时间】:2015-06-11 04:40:13
【问题描述】:

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

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

【问题讨论】:

  • 我遇到了 state go 与警报结合的问题,我通过使用设置为 100 毫秒左右的超时解决了这个问题,例如:延迟你的 state.go,也许这会解决你的问题。
  • @ErikSvedin 谢谢,使用$timeout 有效。如果您回答,我会将其标记为正确。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2015-10-10
    相关资源
    最近更新 更多