Angularjs 角度用户界面路由器用户身份验证检查
我正在尝试使用ui路由器创建一个非常简单的身份验证控件。我在后端进行检查,但是,如果用户没有登录,我想重定向他们 然而,当我尝试访问/配置文件时,什么都没有发生。如果我在console.log()中输入类似“yes”的文本,它将被无限时间注销,直到我得到堆栈大小超出错误。它不断点击/authcheck url,我可以通过Chrome的网络工具看到这一点 如果我删除Angularjs 角度用户界面路由器用户身份验证检查,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我正在尝试使用ui路由器创建一个非常简单的身份验证控件。我在后端进行检查,但是,如果用户没有登录,我想重定向他们 然而,当我尝试访问/配置文件时,什么都没有发生。如果我在console.log()中输入类似“yes”的文本,它将被无限时间注销,直到我得到堆栈大小超出错误。它不断点击/authcheck url,我可以通过Chrome的网络工具看到这一点 如果我删除$state.go(toState.name),我会看到一个空白页面,console.log()显示用户已登录(我是),但我无法看到预
$state.go(toState.name)
,我会看到一个空白页面,console.log()
显示用户已登录(我是),但我无法看到预期的/profile
页面
这里有什么问题
/authcheck
返回200
或403
我的工厂
angular.module('site.profile').factory('Profile', ["$http", function($http) {
return {
authCheck: function() {
return $http.get('/authcheck');
}
};
}]);
用户界面路由器
angular.module('site.profile.routes')
.run(
['$rootScope', 'Profile', '$state', '$stateParams',
function($rootScope, Profile, $state, $stateParams) {
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
if (toState.name !== 'auth') {
event.preventDefault();
Profile.authCheck().then(function(returned) {
if (returned.status === 200) {
console.log("yes!");
console.log(toState.name);
//$state.go($state);
} else {
$state.go('auth');
}
});
}
});
}
]
)
.config(
['$stateProvider', '$urlRouterProvider', '$locationProvider',
function($stateProvider, $urlRouterProvider, $locationProvider) {
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
$stateProvider
.state('profile', {
url: '/profile',
views: {
'': {
templateUrl: 'views/profile/profile.html'
},
'post@profile': {
templateUrl: 'views/post.html'
},
'nav@profile': {
templateUrl: 'views/shared/nav/nav.html'
},
'top@profile': {
templateUrl: 'views/profile/top.html'
}
}
})
.state('auth', {
url: '/signin',
template: "please sign in"
});
}
]);
您正在阻止除
auth
之外的每个状态更改的默认值
您需要一种在用户获得授权后存储用户的方法,这样您就不需要每次都发出新请求,然后可以在阻止更改之前检查该用户对象是否存在
我个人更喜欢在顶级父级状态下使用解析
,因此只需在父级上检查一次授权。然后所有子状态将被阻止,直到父状态被解析