我正在尝试创建基本验证,无论用户是否可以访问某些路由.
我在这方面取得了进展,但有一点我无法弄清楚.
我在这方面取得了进展,但有一点我无法弄清楚.
我正在使用$locationChangeStart来监控路由更改.场景是:
1.如果用户已登录,则允许他访问除auth路由(登录,注册)之外的所有路由.我正在通过从我的AuthFactory调用方法isAuthenticated()来检查这个
2.如果用户未登录,则只访问登录和注册路由.应该防止任何其他路由,并且在这种情况下应该将用户重定向到登录.
$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()工作.问题是,我需要阻止,以防非记录尝试访问某些非auth页面.
好的,你需要这样做:
var authPreventer = $rootScope.$on('$locationChangeStart',oldUrl){ if(AuthFactory.isAuthenticated()){ if(AuthFactory.isAuthRoute(newUrl)){ event.preventDefault(); authPreventer(); //Stop listening for location changes $location.path('/'); } } else { if(!AuthFactory.isAuthRoute(newUrl)){ event.preventDefault(); authPreventer(); //Stop listening for location changes $location.path('/login'); } } });