我正在尝试创建基本验证用户是否可以访问某些路线。我在这方面取得了进展,但有一件事我无法弄清楚。
我正在使用 $locationChangeStart 来监控路线变化。场景是: 1. 如果用户已登录,则允许他访问所有路由,除了 auth 路由(登录、注册)。我通过从我的 AuthFactory 2 调用方法 isAuthenticated() 来检查这一点。如果用户没有登录,那么他只能访问登录和注册路由。应阻止任何其他路由,在这种情况下应将用户重定向到登录。
$rootScope.$on('$locationChangeStart', function(event, newUrl, oldUrl){
if(AuthFactory.isAuthenticated()){
if(AuthFactory.isAuthRoute(newUrl)){
event.preventDefault();
$location.path('/');
}
} else {
if(!AuthFactory.isAuthRoute(newUrl)){
event.preventDefault();
$location.path('/login');
}
}
});
困扰我的事情是具有 preventDefault() 的事情。如果应用程序使用 preventDefault() 到达代码,location.path()
那么之后的代码将无法正常工作。
但是,如果我删除event.preventDefault()
,则location.path()
有效。这个问题是我需要防止,以防非登录尝试访问一些非身份验证页面。
基本上,我希望能够根据请求的路线阻止或重定向。这样做的正确方法是什么?