[英]UI-Router abstract state infinite loop
我正在從ngroute過渡,並嘗試將抽象狀態添加到我的路由中以提供身份驗證檢查。 如果用戶未通過身份驗證,則將其重定向到/login
如果他們已通過身份驗證),然后繼續。
一個關鍵點是,如果用戶在身份驗證時嘗試進入/login
,它將把他們重定向到/
。
我遇到的問題是,如果用戶未通過身份驗證,然后將他們重定向到/login
,則會觸發抽象父狀態,並檢查它們是否已通過身份驗證,然后在無限循環中將其重定向到login ... etc。
angular.module('qaApp').factory('authorization', ['$rootScope', '$state', '$stateParams', 'userService',
function($rootScope, $state, $stateParams, userService){
return {
authorize: function(){
return userService.identity().then(
function(){
let isAuthenticated = userService.isAuthenticated;
if(!isAuthenticated){
$state.is('login'); //Always false
$state.includes('login'); //Always false
//Somehow check to ensure next route is not /login
$state.go('login');
}
//Else if next route is /login redirect to /home...etc
}
)
}
}
}]);
angular.module('qaApp').config(function($stateProvider, $urlRouterProvider){
$urlRouterProvider.otherwise('/login');
$stateProvider.state('app', {
abstract: true,
resolve: {
authorize: ['authorization', function(authorization){
return authorization.authorize();
}]
}
})
.state('login', {
parent: 'app',
url: '/login',
templateUrl: 'app/login/login.html',
controller: 'loginController',
controllerAs: 'login'
})
})
如何確保僅當下一條路由不是/login
時才出現$state.go('login')
?
狀態“登錄”是“應用程序”的子狀態。
1.請求移至“ /登錄”,然后
2.路由器捕獲請求並檢查它是否被授權。
3.如果請求未被授權,則路由器會將請求重定向到“ /登錄”。
然后回到1。
因此,發生了對“ /登錄”的無限請求。
因此,請勿將“登錄”狀態置於“應用”狀態。
我認為您可以這樣划分狀態。
(使登錄狀態不需要被授權。)
.app
..登錄
..abstractStateToAuthorize
...授權后的其他狀態
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.