如果用户尚未进行身份验证,则应该重定向到登录页面。 $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
我有,所以我必须遗漏导致这个问题的东西,但我不确定是什么。
答案 0 :(得分:0)
' ave遇到状态问题与警报一起使用,我通过使用$timeout
设置为100毫秒左右解决了这个问题,例如:延迟你的state.go并希望这将解决你的问题问题。